如何在JavaScript对象的自身方法中修改该对象的属性
对象方法中修改自身属性的实现方案
你给出的示例代码中使用箭头函数作为对象方法,这里存在JS的this绑定逻辑的问题:箭头函数不会绑定属于自身的this,它的this会继承自定义时的外层作用域(全局定义的场景下this指向window/严格模式下为undefined,无法访问到dog对象本身)。
要实现需求可以参考以下几种方案:
- 方案1:替换为普通函数,通过
this访问当前对象(最推荐)
let dog = { name: 'shar-pei', changeName: function(newName) { // 普通函数作为对象方法调用时,this默认指向调用该方法的对象 this.name = newName } } // 测试效果 dog.changeName('chow chow') console.log(dog.name) // 输出:chow chow
- 方案2:直接引用对象变量名(仅适合固定不会被重新赋值的对象,不推荐)
let dog = { name: 'shar-pei', changeName: (newName) => { // 直接通过变量名访问对象,缺点是如果后续dog变量被重新赋值,会指向错误的目标 dog.name = newName } }
- 方案3:基于类创建实例的场景,同样通过
this访问属性
class Dog { constructor(name) { this.name = name } changeName(newName) { this.name = newName } } const dog = new Dog('shar-pei') dog.changeName('pug') console.log(dog.name) // 输出:pug
注意:不要用箭头函数定义对象方法、类原型方法这类需要访问实例自身属性的逻辑,箭头函数的this绑定特性会导致预期外的行为。
内容的提问来源于stack exchange,提问作者nandesuka
相关产品推荐
相关产品推荐

