如何通过参数变量更新对象的 属性 的值

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.
可能会有所帮助