为什么这个Javascript原型不会被覆盖

时间:2012-11-16 16:07:03

标签: javascript prototypal-inheritance

我在这里查看示例Using apply to chain constructors

我理解除了这一行:

fNewConstr.prototype = fConstructor.prototype;

为什么它是必要的,为什么它不会失去刚刚为fNewConstr定义的函数?

Function.prototype.construct = function (aArgs) {
    var fConstructor = this, fNewConstr = function () { fConstructor.apply(this, aArgs); };
    // Why doesn't fNewConstr.prototype get completely overwritten?
    fNewConstr.prototype = fConstructor.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);

alert(myInstance.property1); // alerts "Hello world!"
alert(myInstance instanceof MyConstructor); // alerts "true"
alert(myInstance.constructor); // alerts "MyConstructor"

1 个答案:

答案 0 :(得分:1)

如果你的意思是,为什么在你写作时不会fNewConstr(函数)被覆盖

fNewConstr.prototype = ...;

......答案是因为什么都没有覆盖它。该代码只设置函数的prototype属性。

如果您的问题是:为什么每次调用fNewConstr时都没有construct 重新创建 ,答案是:确实如此。