javascript - 在init之前引用方法

时间:2013-03-11 12:48:20

标签: javascript init

为什么“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 个答案:

答案 0 :(得分:2)

因为第二个在执行匿名函数时评估this.method,而第一个函数生成了一个尚不存在的东西的引用副本。

这可能令人困惑,因为看起来write1write2似乎都尝试使用/引用尚不存在的东西,但是当您声明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();