gpt4 book ai didi

javascript - 使用 javascript 进行非法调用?

转载 作者:搜寻专家 更新时间:2023-11-01 05:23:30 25 4
gpt4 key购买 nike

我有一个函数:

var doThis = function(callback){
callback('google.com');
}

如果我这样做,它会起作用:

doThis(alert);

但是如果我这样做,我会得到一个错误:

doThis(window.location.replace);

Uncaught TypeError: Illegal invocation

我正在为 AJAX 调用构建一个包装器,我需要支持 alert、自定义函数以及 window.location.replace 等功能。我究竟做错了什么?

fiddle :http://jsfiddle.net/32LJf/1/

最佳答案

当您将函数存储在与预期不同的上下文中时,它将无法再访问它之前可以访问的属性。例如:

var myObj = {
foo: "foo",
alert: function(){
alert(this.foo);
}
}

myObj.alert(); // "foo"
var a = myObj.alert;
a(); // undefined.

当作为 myObj 的属性执行警报函数时,它可以访问 this.foo,但是,当您将该函数存储在其他地方时,它就不再可以访问它。要解决它,请存储一个执行该函数的匿名函数。

var myObj = {
foo: "foo",
alert: function(){
alert(this.foo);
}
}

myObj.alert(); // "foo"
var a = function(){myObj.alert();}
a(); // "foo".

并应用于您的代码:

doThis(function(){window.location.replace();});

http://jsfiddle.net/rhdZa/1/

关于javascript - 使用 javascript 进行非法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com