函数内的范围函数 - Javascript

时间:2014-02-23 10:03:56

标签: javascript function scope this

我有以下功能:

var Setup = function() {
    var that = this;
    this.x = 60;

    Setup.prototype.Loop = function() {
        console.log(this.x); // 1: returns 'undefined'
        console.log(Setup.x); // 2: returns 'undefined'
        console.log(hi.x); // 3: returns '60'
        console.log(that.x); // 4: returns '60'
    }
}

var hi = new Setup();

我想知道从this.x函数访问Setup.prototype.Loop构造函数的正确的方式是什么?

我尝试了四种方法(见上文):只有第三和第四行给出了我想要的结果。不可否认,行号。 3不是最好的方法,因为它依赖于对象hi。行号4似乎是我能想到的最好的东西。

我得到了它的工作,但我正在努力学习最好的做事方式。有没有其他方法或更好的方法来做到这一点?

另外,我想这是一个必须提出的问题,但不知怎的,我找不到找到问题的话。另外,如果我在这里和那里使用了一些错误的术语,请原谅我。

感谢您的回复!

2 个答案:

答案 0 :(得分:2)

通常原型函数应该在构造函数之外定义,this.x是访问变量的正确方法。

var Setup = function() {
    this.x = 60;
};

Setup.prototype.Loop = function() {
    console.log(this.x);
};

(new Setup()).Loop();    // 60

答案 1 :(得分:1)

原型应该在构造函数之外设置,以便在创建新实例时可用。

var Setup = function () {
    var that = this;
    this.x = 60;
}

Setup.prototype.Loop = function () {
    console.log(this.x); // 1: returns 'undefined'
    console.log(Setup.x); // 2: returns 'undefined'
    console.log(hi.x); // 3: returns '60'
    console.log(that.x); // 4: returns '60'
}

var hi = new Setup();