如何通过参数变量更新对象的 属性 的值
how to update value of property of an object through argument variable
我想增加对象 pomodoro
的 属性 SCountDown
方法 customization
,它有一个参数 chooseSession
和这个方法
在 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.
试试这个代码。您需要增加 this.SCountDown 而不是 chooseSession
pomodoro = {
SCountDown: 0,
customization: function(chooseSession) {
console.log(chooseSession);
},
sessionPlus: function() {
this.SCountDown++;
this.customization(this.SCountDown);
}
}
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 使用共享传递,并且由于 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();
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.
可能会有所帮助
我想增加对象 pomodoro
的 属性 SCountDown
方法 customization
,它有一个参数 chooseSession
和这个方法
在 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.
试试这个代码。您需要增加 this.SCountDown 而不是 chooseSession
pomodoro = {
SCountDown: 0,
customization: function(chooseSession) {
console.log(chooseSession);
},
sessionPlus: function() {
this.SCountDown++;
this.customization(this.SCountDown);
}
}
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 使用共享传递,并且由于 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();
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.