为什么JavaScript中该函数的this关键字未出现重复引用报错?
问题核心原因
你的错误源于对this指向的逻辑误解:this绑定的是对象本身,不是变量名的字面量替换。
代码执行逻辑拆解
完整代码如下:
function makeUser() { return { name: "John", ref() { return this; } }; } let user = makeUser(); alert(user.ref().name);
user.ref().name的执行会分成两个步骤:
- 第一步执行
user.ref():按照你学到的规则,调用方法时this指向.前面的user对象,所以ref执行后返回的就是user这个对象实体,不是变量名字符串"user" - 第二步拿第一步返回的
user对象取name属性,等价于直接执行alert(user.name),自然能正常输出John,不会触发报错。
常见误区说明
你推导的alert(user.user.name)是错误的,本质是把this的指向当成了变量名的文本替换,实际上this是运行时绑定的对象内存引用,和变量名没有直接的字面替换关系。
内容的提问来源于stack exchange,提问作者Superhuman
相关产品推荐
相关产品推荐

