2012-10-10 66 views
0

對不起 - 我不能完全解釋這個問題,所以我給你看一個例子。如何僅在調用函數時使用函數?

window.onload = function() { 
    var obj = new classs(2); 
    alert(obj.x2); 

    function classs(value){ 
     this.value = value; 

     var multiplication = function(value, n){ 
      console.log(n); 
      return parseInt(value) * parseInt(n); 
     } 

     this.x1 = multiplication(this.value, 1); 
     this.x2 = multiplication(this.value, 2); 
     this.x3 = multiplication(this.value, 3); 
    } 
} 

所以我只能撥打obj.x2,但console.log(n);打印3次。我做錯了什麼?

+0

你的意思是你想調用'window.onload',這樣可以執行計算嗎? – jrd1

回答

0

因爲你根本做乘法的呼叫3次

當你創建對象

var obj = new classs(2); 

它執行代碼在裏頭,你可以看到有3個呼叫的功能「乘法」。

this.x1 = multiplication(this.value, 1); 
this.x2 = multiplication(this.value, 2); 
this.x3 = multiplication(this.value, 3); 
3

x2屬性不會導致任何事物登錄到控制檯,它只能讀取已計算出的值。

性能x1x2和創建classs對象時計算,所以你讀x2屬性之前的值被記錄到控制檯。如果您註釋掉使用x2屬性的行,則值仍將被記錄。


如果你想創建對象後做計算,你需要使用的功能,而不是:

this.x2 = function() { multiplication(this.value, 2); } 

用法:

alert(obj.x2()); 
0

當執行班組長,乘法當設置x1,x2和x3時,函數會執行三次。這就是爲什麼console.log被命中三次。另一方面,警報只會在您調用obj.x2時發生一次。

相關問題