JavaScript对象字面量中this不指向自身,而是取决于调用方式;箭头函数不绑定this;对象内部无法用this引用自身属性;构造函数或class更可靠。

在JavaScript对象字面量中,this 不指向该对象本身,而是取决于函数的调用方式——这是最常被误解的一点。
对象方法中的 this 由调用决定,不是定义位置
很多人以为写在对象里的函数,里面的 this 就自动绑定到这个对象。其实不然:只有当函数作为对象的方法被调用时(如 obj.method()),this 才指向 obj;一旦函数被单独提取或传参,this 就会丢失。
const obj = { name: 'Alice', say() { console.log(this.name); } }; obj.say(); // 'Alice' ✅const fn = obj.say; fn(); // undefined ❌(非严格模式下是全局对象)
箭头函数不绑定 this,会沿作用域链向上找
在对象字面量里用箭头函数定义方法,this 不会指向当前对象,而是继承外层作用域的 this 值——通常是你期望之外的结果。
const obj = { name: 'Bob', say: () => console.log(this.name) }; obj.say(); // undefined 或全局 name(取决于运行环境)❌- 即使在对象内部,箭头函数也无视调用方式,无法通过
.call()、.bind()改变 this。
初始化时的计算属性或嵌套对象中 this 无效
对象字面量内部不能使用 this 来引用自身其他属性,因为对象还没创建完成,this 在这里没有意义,也不会指向即将生成的对象。
立即学习“Java免费学习笔记(深入)”;
const obj = { a: 1, b: this.a + 1 }; // ReferenceError 或 NaN ❌(this 不是 obj)const obj = { a: 1, getB() { return this.a + 1; } }; // ✅ 正确做法:延迟求值,用方法封装
构造函数或 class 中的 this 更可靠
如果需要稳定绑定 this 到实例,建议改用构造函数或 class——它们天然支持实例上下文,且方法可被安全复用。
class Person { constructor(name) { this.name = name; } say() { console.log(this.name); } }- 配合
bind、call或类字段语法(say = () => {})可进一步避免丢失 this。
不复杂但容易忽略:对象字面量只是静态结构,不是执行环境,它不创建新的 this 绑定上下文。


















