Skip to content

借用构造函数 ​

本节目标:理解“借用构造函数”的核心思路,并能把它用于实际开发或面试表达。 借用构造函数(constructor stealing)的技术(有时也叫做伪造对象或经典继承)。

**基本思路:**在子类型构造函数的内部调用父类的构造函数。通过使用apply()和call()方法绑定超类构造函数的执行环境为子类。相当于创建子类时,把创建父类实例的代码执行了一次,不过this指向的是子类实例,如下: function SuperType() { this.colors = ['red', 'blue', 'green']; } function SubType() { //继承了SuperType SurperType.call(this); } var instance1 = new SubType() instance1.colors.push('black'); console.log(instance1.colors);//'red,blue,green,black' var instance2 = new SubType(); console.log(instance2.colors);//'red,blue,green'

可传递参数来让子类实例拥有了父类实例一样的非共享属性 相对原型链而言,借用构造函数还可以在子类型构造函数中向超类型构造函数传递参数。 如下例: function SuperType(name) { this.name = name; } function SubType() { //继承了SuperType,同时还传递了参数 SurperType.call(this, 'Nicholas'); //实例属性 this.age = 29; } var instance1 = new SubType() console.log(instance.name);//'Nicholas' console.log(instance.age);//29

注意点: 为了确保SuperType构造函数不会重写子类型的属性,可以在调用超类型构造函数后,再添加应该在子类型中定义的属性。

单独借用构造函数的问题

  • 子类实例的方法都在构造函数中定义,重复定义了可共用的方法或者说没有定义子类实例共用的方法。
  • 没有继承到父类原型中定义的方法。

本站总访问 — 次