1

ここで例を見ています チェーンコンストラクターへの適用の使用

この行を除いて理解しています:

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"
4

1 に答える 1

1

fNewConstrつまり、書き込み時に(関数が)上書きされないのはなぜですか

fNewConstr.prototype = ...;

...答えは、何も上書きしていないからです。そのコードprototypeは、関数のプロパティを設定するだけです。

あなたの質問が:が呼び出されるたびfNewConstr再作成されないのはなぜですか? 答えは: です。construct

于 2012-11-16T16:09:10.640 に答える