这可能是重复的,如果是这样,我很抱歉。我浏览了几个问题,并没有找到与我的情况完全相符的情况(这可能是一个不好的迹象)。使对象子原型具有父对象的上下文
我有一类,说RandomClass
,被定义为如下
function RandomClass(id){
this._id = id;
}
RandomClass.prototype.getID = function(){
return this._id;
}
var rc = new RandomClass(1);
rc.getID(); //returns 1, as expected
说我要定义一组处理程序,并将其保存在一个子对象(而继续使用原型)的RandomClass。 我对原型的了解程度有限,所以如果下一个位置是非常糟糕的形式,请致歉。
RandomClass.prototype.handlers = {};
RandomClass.prototype.handlers.HandlerOne = function(){
console.log("Handler one calling from ID: "+this._id);
//the context is not the context of RandomClass, but of RandomClass.prototype.handlers!
}
rc.handlers.HandlerOne(); //prints "Handler one calling from ID: unknown"
再次,也许这是不好的形式,但我有几个处理程序需要被调用,这样做,让代码简化为:
var handler = "one of many many handlers returned from an ajax request";
rc.handlers[handler]();
所以,我的问题是如何我是否将HandlerOne的上下文作为RandomClass而不是处理程序的上下文?我想继续使用的原型,因为那时他们没有(在下面的例子中为)克隆多次:
function RandomClass(id){
this._id = id;
this._handlers = {};
}
function HandlerOne(){
console.log("Handler one calling from ID: "+this._id);
}
var rc = new RandomClass(1);
rc._handlers["HandlerOne"] = HandlerOne.bind(rc);
rc._handlers["HandlerOne"]() //prints as expected, but I believe performance is much worse here
另外,考虑到我问这个问题的方式,我毫不犹豫地将任何答案(包括我自己的答案)标记为“正确”。Javascript可能不容易做我所问过的事情,但我会稍微等一下,看看是否有其他答案。 – MandM 2014-09-26 17:34:50