Javascript 将对象实例化后要定义的方法设置为

Javascript 将对象实例化后要定义的方法设置为,javascript,oop,scope,Javascript,Oop,Scope,如何定义一个对象的方法,该方法可以在对象实例化后设置,但在事件发生时从对象内部代码调用 例如,我有这样一个构造函数: function ExampleObject(){ if(!(this instanceof ExampleObject)){ throw "Error not called using the new keyword"; } this.functionToCall; //set a function that can be defined

如何定义一个对象的方法,该方法可以在对象实例化后设置,但在事件发生时从对象内部代码调用

例如,我有这样一个构造函数:

function ExampleObject(){
    if(!(this instanceof ExampleObject)){
        throw "Error not called using the new keyword";
    }
    this.functionToCall; //set a function that can be defined later
    function init(){
        var xhr = new XMLHttpRequest();
        xhr.open("get", location, true);
        xhr.onreadystatechange = function(){
            if(typeof this.functionToCall !== "undefined"){//problem with use of "this" here?
                //...execute code...
            }
        };
        xhr.send();
     }
     init();
}
然后,我创建此对象的一个实例并设置函数:

var example = new ExampleObject();
example.functionToCall = function(){/*some code*/};

但是,如果函数的类型为this.functionToCall!==if,则它永远不会到达if语句中的代码未定义。因此,我的方法似乎不是正确的方法。有没有其他方法来实现这一点?如果是这样,为什么我的方法不起作用呢?

所以,我的方法还可以。我的问题与范围有关。首先,正如在注释中指出的,在这里,您调用条件iftypeof this.onmessage!==未定义确实很重要。如果在构造函数中调用它,那么还不会定义this.onmessage。因此,它必须在事件函数中调用,这就是我的问题所在

在我的事件函数中,我使用this关键字调用了typeof条件。这里,这是指在我的例子xhr中事件函数的对象调用,而不是构造函数定义的对象ExampleObject的实例。为了解决这个问题,我只需在构造函数中放置一个变量,该变量引用以下实例:


然后,我可以在具有不同作用域的内部函数中使用此变量来引用ExampleObject实例。

您在构造函数中执行类型测试,而不是在事件发生时。您需要将其放入由事件触发的另一个函数中。请详细说明。如果测试类型是在构造函数中还是在另一个函数中,那又有什么关系呢?如果我使用this关键字,它应该访问相同的objects属性。老实说,这只是一个例子。我的真实代码在另一个函数中确实具有该条件。我使用了注释行//。。。事件试图说明这一点。@AndroidStudent:是的,但在不同的时间:在分配实际函数之前和之后。也许您应该将该动态函数作为参数传递给构造函数;而不是此后修改实例。
var that = this;