gpt4 book ai didi

javascript - 在 JavaScript 中向函数内的对象添加属性?

转载 作者:行者123 更新时间:2023-11-30 17:36:49 24 4
gpt4 key购买 nike

有没有办法在这个函数(用作类)中向这个对象添加另一个属性:

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") 来自 DP

如何做到这一点?我尝试用 prototype 做一些事情,但无济于事......

最佳答案

由于您似乎希望对 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;

您不必全部创建静态属性,您可以直接在原型(prototype)上定义 displayTypes,但通过 DB.displayTypes.foo = ... 扩展它> 读起来比 DB.prototype.displayTypes.foo = ... 好一点。

关于javascript - 在 JavaScript 中向函数内的对象添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21867821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com