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

how to update value of property of an object through argument variable

本文关键字:属性 对象 更新 何通过 参数 变量      更新时间:2023-09-26

我想递增对象的属性SCountDown pomodoro方法 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.

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();

当你把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

试试这段代码。您需要增加此值。不选择会话

 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.
愿这有帮助