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

JavaScript中call函数调用行为疑问及find方法实现咨询

问题根因

Function.prototype.call() 的语法规则为:fun.call(thisArg, arg1, arg2, ...)

  • 第一个参数thisArg:执行fun时绑定的this指向
  • 第二个及之后的参数:才是会传入fun作为实参的值

你现有代码中写的callback.call(this.val),仅指定了回调的this绑定为1,没有给回调传递任何实参,因此回调的形参o接收到的就是undefined。
额外补充:你传入的回调是箭头函数,本身不支持动态绑定this,call传入的第一个thisArg会直接被忽略,不会产生任何效果。

正确实现方案

如果你的需求是将Hoge实例的val属性作为参数传递给回调,可直接调整为以下写法:

Hoge.prototype.find = function (callback) {
  // 直接将val作为实参传入回调即可
  callback(this.val);
};

如果确实需要用到call(比如同时需要为普通函数类型的回调绑定this指向),可以调整为:

Hoge.prototype.find = function (callback) {
  // 第一个参数为绑定给回调的this,第二个参数开始传入回调需要的实参
  callback.call(this, this.val);
};

调整后运行代码,控制台会输出1和true,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:15:04