javascript借用构造函数的示例分析

  介绍

这篇文章主要介绍了javascript借用构造函数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

<强>借用构造函数

为了解决原型中包含引用类型值所带来问题,开发人员开始使用一种叫做借用构造函数(构造函数偷)的技术。

有时候也叫伪造对象或者经典继承。

这种技术的基本思想非常简单,即在子类型构造函数内部调用超类型构造函数。

函数只不过是在特定环境中的执行代码的对象,因此通过使用应用()和调用()方法也可以在新创造的对象上执行构造函数。

function 超类型(),{   ,,,this.colors =, (“red",“blue",“green"];   }      function 亚型(),{   ,,,//继承了超类型   ,,,SuperType.call(这个);   }      var  instance1 =, new 亚型();      instance1.colors.push (“black");   console.log (instance1.colors);,//(“red",“blue",“green",“black"】      var  instance2 =, new 亚型();   console.log (instance2.colors);,//(“red",“blue",“green"]

注意,这一段代码“借”调了超类型的构造函数。

function 亚型(),{   ,,,//继承了超类型   ,,,SuperType.call(这个);   }

通过使用电话()方法(或应用()方法也可以),实际上是在将要创建的亚型实例对象的环境下调用了超类型构造函数。

这样一来,就会在新亚型对象上,执行超类型()函数中定义的所有对象初始化代码。

所以,亚型的每个实例对象都有具有自己的颜色属性的副本了

<强>传递参数

相对于原型链而言,借用构造函数有一个很大的优势,就是可以在子类型构造函数中向超类型构造函数传递参数。

function 超类型(名字),{   ,,,this.name =,名称;   }      function 亚型(){   ,,,//继承了超类型,同时还传递了参数   ,,,SuperType.call (,,“Shaw");      ,,,//实例属性   ,,,this.age =, 18;   }      var  instance =, new 亚型();      console.log (instance.name);,//,“Shaw"   console.log (instance.age);,//, 18

以上代码中的超类型只接受一个参数名,该参数会直接赋值给一个属性。

在亚型构造函数内部调用超类型构造函数时,实际上是为亚型的实例对象设置了名字属性(这的指向,跟执行上下文有关)。

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

<强>借用构造函数的问题

如果仅仅是借用构造函数,那么也将无法避免构造函数模式存在的问题。

方法都在构造函数中定义,函数的复用就无从说起了,每实例化一个对象,实质上都在每个实例对象上重新创建了一遍方法,造成内存和资源的浪费。

而且,在超类型的原型中定义的方法,对子类型而言也是不可见的(因为这里没用原型对象,实际上子类型的原型链指向了对象),结果所有类型都只能使用构造函数模式。

感谢你能够认真阅读完这篇文章,希望小编分享的“javascript借用构造函数的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

javascript借用构造函数的示例分析