为什么“write2”工作而“write1”不工作?
function Stuff() {
this.write1 = this.method;
this.write2 = function() {this.method();}
this.method = function() {
alert("testmethod");
}
}
var stuff = new Stuff;
stuff.write1();
答案 0 :(得分:2)
因为第二个在执行匿名函数时评估this.method
,而第一个函数生成了一个尚不存在的东西的引用副本。
这可能令人困惑,因为看起来write1
和write2
似乎都尝试使用/引用尚不存在的东西,但是当您声明write2
时,您正在创建一个闭包实际上只复制对this
的引用,然后通过添加this
method
后执行函数体
答案 1 :(得分: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();