JavaScript 中 this 在 getter setter 中怎么指向
在 javascript 的 getter 和 setter 中,this 始终指向调用该访问器属性的对象实例。这意味着无论是通过 obj.prop 读取还是赋值,函数内部的 this 都会自动绑定到 obj,从而允许你直接操作实例上的私有字段或状态。

getter 和 setter 中的 this 与常规方法有何不同
与普通方法相比,getter 和 setter 中的 this 行为一致,都遵循动态绑定规则,但区别在于它们没有显式的参数列表来传递上下文,且无法通过 call 或 apply 强制改变其指向(除非使用 bind 预绑定)。如果将 getter 提取为独立函数并调用,this 会丢失对象上下文。

const obj = {
_value: 0,
get value() {
return this._value;
},
set value(v) {
this._value = v;
}
};
// 正常调用,this 指向 obj
console.log(obj.value); // 0
obj.value = 10;
console.log(obj.value); // 10
// 错误用法:提取后调用,this 指向全局或 undefined
const getValue = obj.value;
getValue(); // TypeError: Cannot read properties of undefined (reading '_value')
setter 中 this 指向异常时的排查
当 setter 中的 this 指向不符合预期时,通常是因为调用方式脱离了对象上下文,或者在类定义中未正确初始化属性。例如,在构造函数中未声明的属性可能在严格模式下导致 this 指向 undefined 的错误。

class Counter {
constructor() {
this.count = 0;
}
set increment(val) {
if (typeof val !== 'number') throw new Error('Invalid');
this.count += val;
}
}
const c = new Counter();
c.increment = 5; // this 指向 c
console.log(c.count); // 5
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











