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;