探讨构造函数内部的方法的问题
使用构造函数的主要问题,就是每个方法都要在实例上重新创建一遍。探讨构造函数内部的方法(或函数)的问题,首先看下两个实例化后的属性或方法是否相等。
var box1=new Box('Lee',100); //传递一致
var box2=new Box('Lee',100); //同上
alert(box1.name==box2.name); //true,属性的值相等
alert(box1.run==box2.run); //false,方法其实也是一种引用地址
alert(box1.run()==box2.run()); //true,方法的值相等,因为传参一致可以把构造函数里的方法(或函数)用 new Function()方法来代替,得到一样的效果,更加证明,他们最终判断的是引用地址唯一性。
function box(name,age){
this.name=name;
this.age=age;
this.run=newFunction("return this.name+this.age+'运行中...'");
//new Function()唯一性
}我们可以通过构造函数外面绑定同一个函数的方法来保证引用地址的一致性,但这种做法没什么必要,只是加深学习了解:
function Box(name,age){
this.name=name;
this.age=age;
this.run=run;
}
function run(){
//通过外面调用,保证引用地址一致
return this.name+this.age+'运行中...';
}虽然使用了全局的函数 run()来解决了保证引用地址一致的问题,但这种方式又带来了一个新的问题,全局中的 this 在对象调用的时候是 Box 本身,而当作普通函数调 用的时候,this又代表 window(而window很可能没有相应的属性)。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!