为什么我不能在替换函数中使用 .call() ?
为什么这是有效的:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为当您传递
call
函数时,您将其从func
的上下文中取出,因此在call
内部是this
关键字将引用window
而不是func
。window
不是一个函数,但call
期望this
是一个函数,因此它中断了。用于比较。
Because when you pass the
call
function, you take it out of the context offunc
, so insidecall
thethis
keyword will refer towindow
instead offunc
.window
is not a function, butcall
expectsthis
to be a function, so it breaks.For comparison.
因为
.call()
本身是一种方法,但对replace()
没有用处。换句话说,虽然您的意图是传递
func
,但实际上您传递的是一个完全不同的函数 (call
),该函数作为的参数没有用处。 >.replace()
。Because
.call()
itself is a method, but not one that is useful toreplace()
.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()
.