You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将对象方法赋值给自身后调用时this为undefined?

为什么(bar.foo = bar.foo)()的返回值是undefined?

先看完整代码:

"use strict";

function foo() {
  return this;
}

let bar = {
  foo,
  baz() {
    return this;
  }
};

console.log( foo() ); // undefined (or globalThis outside strict mode)

console.log( bar.foo() ); // bar
console.log( (bar.foo)() ); // bar

console.log( (bar.foo = bar.foo)() ); // undefined (or globalThis outside strict mode)

核心原因:赋值表达式返回未绑定对象的原始函数

要搞懂这行代码的结果,得拆成两步分析:

  • 第一步:赋值表达式的返回值
    bar.foo = bar.foo这个操作,本质是把bar.foo对应的原始foo函数,重新赋值给bar.foo属性。赋值表达式的返回值就是右侧的函数本身——也就是脱离了bar对象绑定的原始foo函数,不是和bar关联的方法。
  • 第二步:调用返回的函数
    直接调用这个返回的函数时,属于普通函数调用(没有通过对象.方法的形式触发调用)。在严格模式下,普通函数调用的this就是undefined;非严格模式下会自动绑定到全局对象globalThis。

对比其他调用方式

  • bar.foo():通过对象调用方法,this自动绑定到调用它的bar对象。
  • (bar.foo)():括号只是语法上的分组操作,没有改变函数的调用方式,本质还是通过bar调用方法,所以this依然指向bar。

内容的提问来源于stack exchange,提问作者Aladdin Mhemed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:35:32