为什么这有效:
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是函数引用,那么它们是否都可以工作?
以下是此
的 fiddle答案 0 :(得分:6)
因为当您传递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);
答案 1 :(得分:1)
因为.call()
本身是一种方法,但不是对replace()
有用的方法。
换句话说,虽然你的目的是传递func
,但实际上你传递的是一个完全不同的函数(call
),这个函数用作.replace()
的参数无用的目的。