1

「write2」が機能し、「write1」が機能しないのはなぜですか?

function Stuff() {
    this.write1 = this.method;
    this.write2 = function() {this.method();}
    this.method = function() {
        alert("testmethod");
    }
}
var stuff = new Stuff;
stuff.write1();
4

2 に答える 2

2

2つ目は無名関数の実行時に評価this.methodするのに対し、1つ目はまだ存在しないものの参照コピーを作成するためです。

両方のように見え、まだ存在していないものを使用/参照しようとしますが、宣言するwrite1と、実際には参照のみをコピーし、後で関数の本体を実行するクロージャーを作成しているため、混乱する可能性があります。追加することによって変更されましたwrite2write2thisthismethod

于 2013-03-11T12:52:56.883 に答える
1

this.method宣言される前に参照しているため、機能しません。への変更:

function Stuff() {

    this.write2 = function() {this.method();}

    // First declare this.method, than this.write1.
    this.method = function() {
        alert("testmethod");
    }
    this.write1 = this.method;
}
var stuff = new Stuff;
stuff.write1();
于 2013-03-11T12:50:08.413 に答える