Javascript 如何通过参数变量更新对象属性的值
我想用 方法Javascript 如何通过参数变量更新对象属性的值,javascript,object,scope,parameter-passing,Javascript,Object,Scope,Parameter Passing,我想用 方法customization,它有一个参数chooseSession和此方法 在sessionPlus方法中调用,并将scontdown作为参数传递。 当我调用sessionPlus方法时,scontdown属性为 当它被第二次调用时,它不会递增 这是我的密码: pomodoro = { SCountDown: 0, customization: function(chooseSession) { chooseSession++; console.log(c
customization
,它有一个参数chooseSession
和此方法
在sessionPlus
方法中调用,并将scontdown
作为参数传递。
当我调用sessionPlus
方法时,scontdown
属性为
当它被第二次调用时,它不会递增
这是我的密码:
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.
试试这个代码。您需要递增此。向下搜索不选择会话
pomodoro={
侦察员:0,
自定义:功能(选择会话){
console.log(选择会话);
},
sessionPlus:function(){
这个.showndown++;
this.customization(this.scontdown);
}
}
pomodoro.sessionPlus();
pomodoro.sessionPlus()代码>当您将this.SCountDown
传递到customization
时,您将传递其值(即零)。然后,将该值增加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
JavaScript使用pass-by-sharing,由于ScontDown是一个基本值(整数),因此不能以您尝试的方式引用它。它将始终记录为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();
pomodoro={
侦察员:0,
自定义:函数(){
console.log(this.SCountDown);
},
sessionPlus:function(){
this.scontdown=this.scontdown+1;
这个。定制();
}
}
pomodoro.sessionPlus();//它返回1,这是我需要的,但是
pomodoro.sessionPlus();//它还返回1,但我需要的是2。
在JavaScript中不能通过引用传递变量。如果要将变量传递到函数并使该函数递增,则需要传入一个对象并递增其一个属性,或者重新考虑解决方案,这样就不需要按引用传递。谢谢@Monica Olejniczak