下面是可复用继承函数inherit()的一种实现方法: 复制代码 代码如下: function inherit(C,P){ C.prototype = new P(); }
这里原型属性应该指向一个对象,而不是一个函数,因此他必须指向一个由父构造函数所创建的实例,而不是指向构造函数本身。 在这之后,创建Child对象时,会通过原型从Parent实例获得他的功能: 复制代码 代码如下: var kid =new Child(); kid.say();//"Adam"
调用继承之后的原型链: 进一步添加kid的属性: 复制代码 代码如下: var kid = new Child(); kid.name = "Patrick"; kid.say();//"Patrick"
原型链的变化情况: 可以在自己对象属性里面找到name,就不用再去查找原型链了。 使用上述模式的缺点,其中一个缺点是同时继承了两个对象的属性,即添加到this的属性及原型属性。大多数时候,不需要自身的这些属性。 另外一个缺点,使用inherit()继承不支持将参数传递给子构造函数中,例如: 复制代码 代码如下: var s = new Child("Seth"); s.say();//"Adam"