我有一个功能:
var doThis = function(callback){
callback('google.com');
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它的工作原理:
doThis(alert);
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,我会收到一个错误:
doThis(window.location.replace);
Run Code Online (Sandbox Code Playgroud)
未捕获的TypeError:非法调用
我正在为AJAX调用构建一个包装器,我需要支持alert自定义函数等函数window.location.replace.我究竟做错了什么?
将函数存储在与预期不同的上下文中时,它将无法再访问先前可以访问的属性.例如:
var myObj = {
foo: "foo",
alert: function(){
alert(this.foo);
}
}
myObj.alert(); // "foo"
var a = myObj.alert;
a(); // undefined.
Run Code Online (Sandbox Code Playgroud)
当作为myObj的属性执行alert函数时,它可以访问this.foo,但是,当您将该函数存储在其他位置时,它将无法再访问它.要解决它,请存储一个执行该函数的匿名函数.
var myObj = {
foo: "foo",
alert: function(){
alert(this.foo);
}
}
myObj.alert(); // "foo"
var a = function(){myObj.alert();}
a(); // "foo".
Run Code Online (Sandbox Code Playgroud)
并应用于您的代码:
doThis(function(){window.location.replace();});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2266 次 |
| 最近记录: |