【发布时间】:2015-01-28 18:02:42
【问题描述】:
如何定义一个对象的方法,该方法可以在对象实例化后设置,但在事件发生时从对象内部代码调用?
例如,我有一个这样的构造函数:
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*/};
但是,它永远不会到达 if 语句中的代码,以查看函数是否已定义 (if(typeof this.functionToCall !== "undefined"))。因此,看来我的方法可能不是正确的方法。是否有另一种方法来实现这一目标?如果是这样,为什么我的方法行不通?
【问题讨论】:
-
您在构造函数中进行
typeof测试,而不是在事件发生时。您需要将其放入由事件触发的另一个函数中。 -
请详细说明。为什么 typeof 测试是在构造函数中还是在另一个函数中?如果我使用
this关键字,它应该访问相同的对象属性。 -
老实说,这只是一个例子。我的真实代码确实在另一个函数中有条件。我使用注释行
//... event has occurred试图说明这一点。 -
@AndroidStudent:是的,但在不同的时间:在您分配实际功能之前与之后。
-
也许你应该简单地将动态函数传递作为参数给构造函数;而不是之后修改实例。
标签: javascript oop scope