有没有办法,在这个函数中添加另一个属性(用作类):
function DP() {
var _this = this;
this.displayTypes = {
normal: function(div) { _this.displayNormal(div) },
round: function(div) { _this.displayRound(div) }
}
this.displayNormal = function(div) { ... };
this.displayRound = function(div) { ... };
this.display = function(div, type) {
this.displayTypes[type](div);
}
}
var dp = new DP();
// Now here I'd basically like to add another property to the DP.displayTypes
// called "rect" referencing to a function in a different class called
// DPExtension.displayRect(). So something like this:
// rect: function(div) { DPExtension.displayRect(div) }
这样我就可以调用dp.display("place-to-display", "rect")
,然后它会基本上从displayRect("place-to-display")
类/函数执行DPExtension
,而调用像dp.display("place-to-display", "round")
这样的函数会执行{来自displayRound("place-to-display")
的{1}}。
如何做到这一点?我尝试用DP
做一些事情,但无济于事......
答案 0 :(得分:2)
由于您希望displayTypes
的所有实例共享DP
的更改,因此您应该让它由所有实例共享,而不是特定于实例。你可以通过使它成为DP
的静态属性来实现这一点:
function DP() {
// these should probably go on DP.prototype as well
this.displayNormal = function(div) { ... };
this.displayRound = function(div) { ... };
}
// static
DP.displayTypes = {
normal: function(div) { this.displayNormal(div) },
round: function(div) { this.displayRound(div) }
};
DP.prototype.display = function(div, type) {
this.displayTypes[type].call(this, div);
};
DP.prototype.displayTypes = DB.displayTypes;
// somewhere else
DP.displayTypes.rect = DPExtension.displayRect;
您不必全部创建静态属性,您可以直接在原型上定义displayTypes
,但通过DB.displayTypes.foo = ...
扩展它会比DB.prototype.displayTypes.foo = ...
读得更好。
答案 1 :(得分:0)
您是否尝试过这样添加:
var dp = new DP();
dp.displayTypes['rect'] = function(div) { DPExtension.displayRect(div); };
答案 2 :(得分:0)
我认为您可以在创建DP并传递当前实例时将DP更改为具有显示类型对象。创建显示类型时DP。
将DP的方法放在DP.prototype上。以及DisplayTypes.prototype稍后添加方法的DisplayTypes方法会影响所有实例,未来和已创建的实例。