隐式绑定的this指向调用时点号左边的对象;如obj.say()中this为obj,赋值后调用则丢失绑定,优先级低于new和显式绑定。

隐式绑定的 this 指向,取决于函数**作为哪个对象的方法被调用**——也就是看“点号(.)左边是谁”。只要函数是通过 obj.method() 这种形式调用的,this 就自动绑定到 obj 上。
看调用时的“点左边对象”
JavaScript 引擎在执行函数前会检查调用语法。如果写的是 obj.foo(),引擎就认定 foo 是以 obj 的方法身份运行的,于是把 this 设为 obj。
const obj = { name: 'Alice', say() { console.log(this.name); } }; obj.say(); // 输出 'Alice'- 哪怕函数定义在别处,只要调用时带点且左边是对象,就按该对象绑定:
const fn = obj.say; obj.say(); // this → obj;但 fn(); // this → undefined(严格模式)
嵌套对象也只看直接调用者
多层嵌套不影响判断,关键还是最后一级点号左边的对象。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
const user = { profile: { name: 'Bob', get() { return this.name; } } }; user.profile.get(); // this → user.profile,输出 'Bob'const getRef = user.profile.get; getRef(); // this 不再是 user.profile,而是全局或 undefined
注意赋值后丢失绑定的常见陷阱
把方法赋给变量或传入其他函数时,“点调用”结构被破坏,隐式绑定失效。
const btn = { click() { console.log(this); } }; document.getElementById('x').onclick = btn.click; // 点击时 this → button 元素,不是 btn- 修复方式:用箭头函数、
.bind(btn)、或包装成() => btn.click()
与 new 绑定、显式绑定冲突时的优先级
隐式绑定优先级最低。如果函数同时满足多种绑定条件,按以下顺序生效:
-
new fn()→this指向新实例(new 绑定最高) -
fn.call(obj)或fn.bind(obj)→ 显式绑定 -
obj.fn()→ 隐式绑定(仅当上面两种都未触发时才生效)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










