JavaScript'this'在不同的上下文中

Voj*_*ěch 2 javascript oop

我正在尝试创建一个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对象的正确方法.我将不胜感激任何建议.

pim*_*vdb 5

您可以使用绑定特定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 在旧版浏览器上不可用,但有可用垫片.