gpt4 book ai didi

不同上下文中的 JavaScript 'this'

转载 作者:行者123 更新时间:2023-11-29 17:25:10 26 4
gpt4 key购买 nike

我正在尝试创建一个 JavaScript 对象,如下所示。

var MyObject = function (parameters) {
this.parameters = parameters;
parameters.userFunction(this.MyObjectCallback);
}

MyObject.SOME_STATIC_VARIABLE = 21;

MyObject.prototype = {
myObjectCallback: function() {
console.log(this);
}
}

MyObject 对象将接受一个 userFunction,它将向其传递一个处理程序。用户函数将执行一些逻辑并将结果传回实例,例如:

new MyObject({userFunction: function(callback) {
$.post(
'http://localhost/~knyttl/source.php',
{},
callback,
'json');,
}});

不幸的是,即使正确调用了 callbackthis 得到的是 JQuery 对象的实例,而不是 MyObject 的实例 我想要的实例。总而言之,我无法保留 MyObject 实例。

我什至不确定这是否是创建 JavaScript 对象的正确方法。如有任何建议,我将不胜感激。

最佳答案

您可以使用 .bind 绑定(bind)特定的 this 值。我还更正了 My 的大写。

parameters.userFunction(this.myObjectCallback.bind(this));

当你调用像a.b()这样的函数时,在b中,this === a。但是,如果您直接调用它而只是传递函数(如a.b)并稍后调用它,则此绑定(bind)将丢失。

.bind 返回一个新函数,它现在接收 jQuery ajax 结果作为 this。但是,它会忽略它并使用预定义的(绑定(bind)的)this 调用 myObjectCallback

.bind 在旧版浏览器上不可用,但可以使用 shim。

关于不同上下文中的 JavaScript 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9431773/

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