「write2」が機能し、「write1」が機能しないのはなぜですか?
function Stuff() {
this.write1 = this.method;
this.write2 = function() {this.method();}
this.method = function() {
alert("testmethod");
}
}
var stuff = new Stuff;
stuff.write1();
「write2」が機能し、「write1」が機能しないのはなぜですか?
function Stuff() {
this.write1 = this.method;
this.write2 = function() {this.method();}
this.method = function() {
alert("testmethod");
}
}
var stuff = new Stuff;
stuff.write1();
2つ目は無名関数の実行時に評価this.method
するのに対し、1つ目はまだ存在しないものの参照コピーを作成するためです。
両方のように見え、まだ存在していないものを使用/参照しようとしますが、宣言するwrite1
と、実際には参照のみをコピーし、後で関数の本体を実行するクロージャーを作成しているため、混乱する可能性があります。追加することによって変更されましたwrite2
write2
this
this
method
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();