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

JavaScript代码中f.bar()、f.baz()、f.biz()返回值解析求助

三个函数调用的返回值解析

我们逐个分析代码中三个函数调用的行为:

1. f.bar() 返回 7

当用 new Foo(7) 创建实例 f 时,构造函数 Foo 内部的 this 指向新创建的实例 f。bar 是被直接赋值给 this 的箭头函数,箭头函数会捕获定义时所在作用域的变量,这里它能访问到构造函数的参数 a(值为7),所以调用 f.bar() 会返回7,你的推测是正确的。

2. f.baz() 抛出 ReferenceError

baz 是构造函数 Foo 内部用 var 声明的局部函数,作用域仅限于 Foo 函数内部,外部无法访问。尝试在 f 实例上调用 baz() 时,JavaScript 找不到这个方法,会抛出 ReferenceError: baz is not defined(具体提示依运行环境略有差异),这和你的推测一致。

3. f.biz() 抛出 TypeError

这里有两个核心问题导致报错:

  • 原型赋值时机错误:new Foo(7) 创建实例 f 时,实例的原型链已经指向 Foo 原本的 prototype 对象;构造函数内部修改 Foo.prototype 的操作是在实例创建之后执行的,所以 f 的原型链不会更新到新的 prototype 对象,f 本身和原型链中都找不到 biz 方法。
  • 箭头函数的 this 指向问题:就算把 Foo.prototype 的赋值放在构造函数外部(让实例能继承到 biz),biz 作为箭头函数,它的 this 会捕获定义时词法作用域的 this——如果是在全局作用域定义,this 指向全局对象(浏览器中为 window),全局对象没有 bar 方法,调用时依然会报错。

实际运行时,调用 f.biz() 会先抛出 TypeError: f.biz is not a function,因为 f 根本不存在这个方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:06:44