2

这是我的代码:

var Test = (function () {
    function Test() {
        this.sum = n;

        this.calculate();
    }

    Test.prototype.calculate = function() {
        n = 5;
        return n;
    }
    return Test;
})();

var mytest = new Test();

你能解释一下为什么 n 是未定义的吗?我认为 return n 应该有所帮助,但我错了。

4

3 回答 3

2

您的构造函数似乎有一个错误。n您在分配它之前正在阅读。

也许这会更清楚:

function Test() { this.sum = this.calculate(); }

然后完全摆脱n价值。

Test.prototype.calculate = function() { return 5; }
于 2013-03-03T13:47:22.613 回答
0

这里我试着解释一下。

function Test() {
    this.sum = n; // assign undefined to this.sum

    this.calculate(); // n = 5, but doesn't affect this.sum as undefined is already passed to sum
}

正确的行为(你想要的)

function Test() {

    this.calculate(); 
    this.sum = n; 

}
于 2013-03-03T13:48:03.893 回答
0

不知道你想做什么,但试试这个:

var Test = (function () {
    function Test() {
        this.sum = this.calculate();
    }

    Test.prototype.calculate = function() {
        var n = 5;
        return n;
    }
    return Test;
})();

var mytest = new Test();
alert(mytest.sum); // 5

回答你的问题 -n因为undefined它在你试图做的时候没有价值this.sum = n;this.calculate()如果您首先调用然后尝试分配它可能会起作用this.sum = n;。但即使在这种情况下,这也是非常错误的,因为您将变量泄漏n到全局命名空间(当您没有使用 显式初始化变量时var,它会泄漏到全局命名空间 - window)。所以为了说明我的意思 - 这可以工作:

var Test = (function () {
    function Test() {
        this.calculate();

        this.sum = n; // n is global now, hence accessible anywhere and is defined by this moment
    }

    Test.prototype.calculate = function() {
        n = 5; // not initialized with var so it leaks to global scope - gets accessible through window.n
        return n; // has no sense, since you do not use returned value anywhere
    }
    return Test;
})();

var mytest = new Test();
于 2013-03-03T13:42:24.713 回答