2015-12-24 30 views
3

更新的對象的屬性值我想與 方法customization,它具有一個參數chooseSession並且該方法 遞增對象pomodoro的屬性SCountDown被內sessionPlus方法傳遞SCountDown作爲參數調用。 當我呼叫sessionPlus方法,SCountDown屬性增量爲 一次,當它被第二次調用等,它不增加。如何通過參數變量

這裏是我的代碼:

pomodoro = { 
SCountDown: 0, 
customization: function(chooseSession) { 
    chooseSession++; 
    console.log(chooseSession);  
}, 
sessionPlus : function() { 
    this.customization(this.SCountDown);   
} 
} 
pomodoro.sessionPlus(); // it returns 1 , this is what i needed but 
pomodoro.sessionPlus(); // it also returns 1, but what i need is 2. 
+0

您不能在JavaScript中引用傳遞變量; [所有變量都通過值傳遞](http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value)。如果你想將一個變量傳遞給一個函數並使該函數增加它,你需要傳遞一個對象並增加它的一個屬性,或者重新考慮你的解決方案,以便不需要傳遞引用。 – meagar

回答

1

當您通過this.SCountDowncustomization時,您傳遞其值(零)。然後,這個值增加1並輸出。 this.SCountDown的實際值永遠不會改變。

JavaScript通過值傳遞基元
這意味着無法通過將原語傳遞給函數來修改該原語。

function modify(a) 
{ 
    a = a * 2; 
} 

var x = 2; 
modify(x); 
console.log(x); // 2 

然而,你可以因爲JS使用呼叫通過共享策略修改傳遞對象的內部屬性。
因此,您可以執行以下操作:

function modify(o) 
{ 
    o.val = o.val * 2; 
} 

var x = { val: 2 }; 
modify(x); 
console.log(x.val); // 4 
+0

謝謝@Yeldar Kurmangaliyev – rameshsyn

1

試試這個代碼。你需要增加this.SCountDown沒有chooseSession

pomodoro = { 
 
    SCountDown: 0, 
 
    customization: function(chooseSession) { 
 
    console.log(chooseSession); 
 
    }, 
 
    sessionPlus: function() { 
 
    this.SCountDown++; 
 
    this.customization(this.SCountDown); 
 
    } 
 
} 
 
pomodoro.sessionPlus(); 
 
pomodoro.sessionPlus();

希望這會幫助你。

2

的JavaScript通過共享使用通和自SCountDown是一個原始值(整數),它不能在您嘗試的方式被引用。它始終記錄爲1,因爲您將始終傳遞原始值0,然後遞增該值。您需要直接引用this.SCountDown而不是chooseSession

var pomodoro = { 
    SCountDown: 0, 
    customization: function(chooseSession) { 
     console.log(chooseSession); 
    }, 
    sessionPlus: function() { 
     this.SCountDown++; 
     this.customization(this.SCountDown); 
    } 
} 

pomodoro.sessionPlus(); 
pomodoro.sessionPlus(); 
+0

謝謝@Monica Olejniczak – rameshsyn

1

pomodoro = { 
 
SCountDown: 0, 
 
customization: function() { 
 
    
 
    console.log(this.SCountDown);  
 
}, 
 
sessionPlus : function() { 
 
    this.SCountDown=this.SCountDown+1; 
 
    this.customization();   
 
} 
 
} 
 
pomodoro.sessionPlus(); // it returns 1 , this is what i needed but 
 
pomodoro.sessionPlus(); // it also returns 1, but what i need is 2.
願這幫助