我正在尝试创建一个JavaScript对象,如下所示.
var MyObject = function (parameters) {
this.parameters = parameters;
parameters.userFunction(this.MyObjectCallback);
}
MyObject.SOME_STATIC_VARIABLE = 21;
MyObject.prototype = {
myObjectCallback: function() {
console.log(this);
}
}
Run Code Online (Sandbox Code Playgroud)
该MyObject对象将接受将传递处理程序的userFunction.用户函数将执行一些逻辑并将结果传递回实例,例如:
new MyObject({userFunction: function(callback) {
$.post(
'http://localhost/~knyttl/source.php',
{},
callback,
'json');,
}});
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使callback正确调用,也this可以获取JQuery对象的实例,而不是MyObject我想要的实例.总而言之,我无法保留MyObject实例.
我甚至不确定这是否是创建JavaScript对象的正确方法.我将不胜感激任何建议.
您可以使用绑定特定this值.bind.我也纠正了资本化My.
parameters.userFunction(this.myObjectCallback.bind(this));
Run Code Online (Sandbox Code Playgroud)
当你调用一个函数a.b(),然后在里面b,this === a.但是,如果您不直接调用它但只传递函数(如a.b)并稍后调用它,则此绑定将丢失.
.bind返回一个新函数,现在接收jQuery ajax结果为this.但是,它会忽略它并myObjectCallback使用预定义(绑定)调用this.
.bind 在旧版浏览器上不可用,但有可用垫片.