为什么我不能在替换函数中使用 .call() ?

发布于 2024-10-16 23:21:35 字数 424 浏览 4 评论 0原文

为什么这是有效的:

function func(a,b,c) {
    console.log(this, a,b,c);
    return '';
}
'testing'.replace(/e/, func);

但这不是:

function func(a,b,c) {
    console.log(this, a,b,c);
    return '';
}
'testing'.replace(/e/, func.call);

如果 func 是函数引用,而 call 是函数引用,那么它们不应该都工作吗?

这是一个小提琴

Why is this valid:

function func(a,b,c) {
    console.log(this, a,b,c);
    return '';
}
'testing'.replace(/e/, func);

but this isn't:

function func(a,b,c) {
    console.log(this, a,b,c);
    return '';
}
'testing'.replace(/e/, func.call);

if func is a function reference, and call is a function reference shouldn't they both work?

Here's a fiddle of this

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一抹苦笑 2024-10-23 23:21:35

因为当您传递call函数时,您将其从func的上下文中取出,因此在call内部是this 关键字将引用 window 而不是 func

window 不是一个函数,但 call 期望 this 是一个函数,因此它中断了。

用于比较。

var AnObject = {
    call: function () { console.log("this.location is: ", this.location); },
    location: "This string is the location property of AnObject"
};

AnObject.call();
setTimeout(AnObject.call, 500);

Because when you pass the call function, you take it out of the context of func, so inside call the this keyword will refer to window instead of func.

window is not a function, but call expects this to be a function, so it breaks.

For comparison.

var AnObject = {
    call: function () { console.log("this.location is: ", this.location); },
    location: "This string is the location property of AnObject"
};

AnObject.call();
setTimeout(AnObject.call, 500);
疾风者 2024-10-23 23:21:35

因为 .call() 本身是一种方法,但对 replace() 没有用处。

换句话说,虽然您的意图是传递 func,但实际上您传递的是一个完全不同的函数 (call),该函数作为 的参数没有用处。 >.replace()

Because .call() itself is a method, but not one that is useful to replace().

In other words, while your intention is to pass func, you're actually passing a completely different function (call) that serves a purpose not useful as an argument to .replace().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文