You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在函数中修改JavaScript对象属性值(OOP新手求助)

解决方法:让函数修改你的对象实例

嘿,作为刚接触OOP的新手,遇到这种参数和对象属性混淆的问题太正常啦!咱们一步步来理清问题,然后给出解决方案~

先搞懂为什么原来的函数不起作用

你写的myFunction里的value1、value2、value3都是函数的局部参数——当你调用myFunction(object1.value1, object1.value2, object1.value3)时,传递的是这些属性的具体值(数字属于基本类型,是值传递),所以函数里修改的只是局部变量,和object1本身的属性完全没关系。

方案1:让函数直接接收对象实例(最简单直接)

既然要修改对象的属性,不如直接把整个对象传给函数,这样函数就能直接操作对象的属性啦:

// 修改后的函数,接收对象作为参数
function myFunction(obj) {
  obj.value1 += obj.value2; // 1 + 2 = 3
  obj.value3 += 1; // 3 + 1 = 4
}

// 调用时传入你的object1实例
myFunction(object1);

// 验证结果
console.log(object1.value1); // 输出3
console.log(object1.value3); // 输出4

原理:对象是引用类型,传递给函数的是对象的引用,所以函数里修改对象的属性会直接影响到原实例。

方案2:把函数变成对象的方法(更符合OOP思想)

在面向对象编程里,操作对象的方法最好和对象本身绑定,这样更符合封装的理念。咱们可以把myFunction改成myObject的方法:

方式A:在构造函数内定义方法

function myObject(value1, value2, value3) {
  this.value1 = value1;
  this.value2 = value2;
  this.value3 = value3;

  // 给每个实例添加update方法
  this.updateValues = function() {
    this.value1 += this.value2;
    this.value3 += 1;
  };
}

// 创建实例后直接调用方法
var object1 = new myObject(1,2,3);
object1.updateValues();

console.log(object1.value1); // 3
console.log(object1.value3); // 4

方式B:用原型链共享方法(更高效)

如果要创建多个myObject实例,用原型链定义方法可以让所有实例共享同一个方法,节省内存:

function myObject(value1, value2, value3) {
  this.value1 = value1;
  this.value2 = value2;
  this.value3 = value3;
}

// 把方法添加到原型上
myObject.prototype.updateValues = function() {
  this.value1 += this.value2;
  this.value3 += 1;
};

var object1 = new myObject(1,2,3);
object1.updateValues();

console.log(object1.value1); // 3
console.log(object1.value3); // 4

两种方案都能达到你的需求,如果你只是临时修改单个对象,方案1足够用;如果后续还要给更多实例添加类似操作,方案2更符合OOP的设计思路~

内容的提问来源于stack exchange,提问作者person341

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:19:59