2013-03-03 87 views
2

這裏是我的代碼:範圍以JavaScript對象

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是不確定的?我認爲回來應該有所幫助,但我錯了。

+0

'N' *是* 5調用'calculate'後,只有你之前得到一個例外。看看你的錯誤控制檯。 – Bergi 2013-03-03 12:53:39

+0

你想做什麼?你什麼時候認爲'n'是5,應該返回'n'?你是如何測試它的? – Bergi 2013-03-03 12:55:02

回答

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 

要回答你的問題 - nundefined,因爲它有,當你試圖做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(); 
2

您的構造函數似乎有一個錯誤。在分配之前,您正在從n讀取。

這也許會更清晰:

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

然後得到完全擺脫n價值。

Test.prototype.calculate = function() { return 5; } 
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; 

}