function Child() {
Parent.apply(this, arguments)
}
var child = new Child()
console.log(child.name)
这种方式的最大优势就是,在子对象的构造器中,是对子对象的自身属性进行完全的重建,引用类型的变量也会生成一个新值而不是一个引用,所以对子对象的任何操作都不会影响父对象。
而这种方法的缺点在于,在子对象的构建过程中没有使用过new操作符,因此子对象不会继承父级原型对象上的任何属性,在上面的代码中,child的name属性将会是undefined。
要解决这个问题,可以再次手动将子对象构造器原型设为父对象的实例:
复制代码 代码如下:
Child.prototype = new Parent()
但这样又会带来另一个问题,即父对象的构造器会被调用两次,一次是在父对象构造器借用过程中,另一次是在继承原型过程中。
要解决这个问题,就要去掉一次父对象构造器的调用,构造器借用不能省略,那么只能去掉后一次调用,实现继承原型的另一方法就是迭代复制:
复制代码 代码如下:
extend2(Child, Parent)
使用之前实现的extend2()方法即可。
您可能感兴趣的文章: