Javascript 继承

原创 uptown 随笔 js 127阅读 28 天前 举报
说到继承,先来个小测试:求方法实现 f(6).num(1),结果等于6。
想到方法了吗?不如先来看一段代码:

如果研究过jQuery源码,应该了解,这就是jQuery面向对象的基本思路,关键点在继承,子类继承父类的原型属性和方法。jQuery的巧妙在于:子类同时也是父类的一个原型方法

1、利用 call、apply 继承

缺点:不能继承父类原型的属性和方法

2、原型链继承

缺点
· 继承时,要再次生成父类实例,耗费内存;
· 子类要添加属性和方法,只能在“Fish.prototype = new Food("Salmon");”后面。

3、直接继承prototype

缺点:
· 只能继承父类原型的属性和方法,不能继承父类构造函数内的属性和方法;
· 父类和子类的构造函数都指向了同一个对象。

4、 Object.create(父类原型)

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto
*基于方法3的优化,解决了父类和子类的构造函数指向同一个对象的问题。

缺点:只能继承父类原型的属性和方法,不能继承父类构造函数内的属性和方法;

5、call/apply + Object.create(父类原型)

这样,前面的问题,都有效得到解决,算是比较完美的一个方案。

6、ES6 class

ES6中加入了静态方法和属性,也能通过 extends 继承

最后,提前祝各位大小朋友:六一儿童节快乐!

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复