为什么'这个'需要本地参考?第一个代码段工作正常,但第二个代码段产生错误...您正在创建引用(不是通过值传递),因此您将修改相同的对象原型,这是您正在尝试的无论如何......不确定错误来自哪里......
代码差异是每个细分的前几行
第一段代码:
Function.prototype.construct = function(aArgs) {
var a = this;
var fNewConstr = function() { a.apply(this, aArgs); };
fNewConstr.prototype = a.prototype;
return new fNewConstr();
};
function MyConstructor() {
for (var nProp = 0; nProp < arguments.length; nProp++) {
this['property' + nProp] = arguments[nProp];
}
}
var myArray = [4, 'Hello world!', false];
var myInstance = MyConstructor.construct(myArray);
第二段代码:
Function.prototype.construct = function(aArgs) {
var fNewConstr = function() { this.apply(this, aArgs); };
fNewConstr.prototype = this.prototype;
return new fNewConstr();
};
function MyConstructor() {
for (var nProp = 0; nProp < arguments.length; nProp++) {
this['property' + nProp] = arguments[nProp];
}
}
var myArray = [4, 'Hello world!', false];
var myInstance = MyConstructor.construct(myArray);
答案 0 :(得分:0)
在代码的第一位,你的“构造”方法,this
的值将是你调用它的函数。 不函数打算从其内部构造函数返回的新构造的对象。
为每个函数调用设置this
的值,具体取决于调用的性质。您通过new
调用“fNewConstr”,因此该函数中this
的值是正在构造的对象。为了将原始“根”函数正确应用于新创建的对象,它需要对该函数的引用。这就是“a”中保存的内容。
当您致电
时,一步一步MyConstructor.construct(myArray);
会发生什么:
.
运算符导致查找属性“construct”,首先在“MyConstructor”函数对象本身上查找,然后在对象的原型上查找属性名称。( )
运算符启动函数调用。this
是对“MyConstructor”函数的引用。该引用立即被复制到“a”。new
调用。创建一个新对象,现在启动 函数调用,this
引用该新对象。this
将引用使用new
操作构造的对象,参数将是最初传入的数组的元素。