在 javascript 中,方法内部通过 this 调用同对象其他方法时,必须以“对象.方法”形式调用才能确保 this 指向该对象;若方法被单独提取或传入回调,this 会丢失。

在 JavaScript 中,方法内部通过 this 调用同对象的其他方法,前提是该方法必须作为对象的属性被调用(即以“对象.方法”形式触发),这样才能保证 this 指向当前对象。
确保 this 指向正确的对象
只有当方法是作为对象的属性被调用时,this 才会指向该对象。如果方法被单独提取或传入回调,this 会丢失,变成 undefined(严格模式)或全局对象(非严格模式)。
- ✅ 正确:直接通过对象调用,
this自动绑定到对象 - ❌ 错误:把方法赋值给变量后调用,
this失去绑定
常见写法示例
以下是一个典型安全用法:
const obj = {
name: 'Alice',
greet() {
return `Hello, ${this.name}`;
},
introduce() {
return `${this.greet()}! I'm ${this.name}.`; // ✅ this.greet() 正常调用
}
};
console.log(obj.introduce()); // "Hello, Alice! I'm Alice."
避免 this 丢失的几种方式
当需要将方法作为回调或赋值使用时,需手动绑定 this:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 使用
.bind(this):如setTimeout(obj.introduce.bind(obj), 100) - 使用箭头函数(在对象字面量中慎用,因箭头函数不绑定
this):适合在类或构造函数内定义 - 使用
call/apply:如obj.introduce.call(obj) - 类中用箭头函数属性(ES6+):
introduce = () => { ... },自动绑定实例
注意:对象字面量中不能用箭头函数替代方法简写
下面写法是错误的,因为箭头函数没有自己的 this,会继承外层作用域(通常是全局或 undefined):
const obj = {
name: 'Bob',
greet: () => `Hello, ${this.name}` // ❌ this 不指向 obj
};
此时 this.name 是 undefined,结果为 "Hello, undefined"。
只要保持调用上下文不变,this 就能自然访问同对象其他方法。关键不是语法多复杂,而是理解调用时的执行上下文。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










