gpt4 book ai didi

javascript - 如何有效地在对象上应用许多不同的规则并使用 JavaScript 的面向对象技术

转载 作者:行者123 更新时间:2023-12-03 05:41:42 25 4
gpt4 key购买 nike

这是我第一次完成这项任务。我需要根据该字段更新我的用户界面。该字段可以有不同的类型。在这里,我只是检查备忘录或 bool 类型。

// UI Field Rule set.    

var UIFieldRules = {
isMemo: function() {
return this.DataType === DataTypeKVP("Memo");
},
isBoolean: function() {
return this.DataType === DataTypeKVP("Boolean");
},
MapToList: function() {
if (UIFieldRules.isMemo.call(this) || UIFieldRules.isBoolean.call(this)) {
console.log("memo or bool");
console.log(UIFieldRules.isMemo.call(this));
console.log(this);
MAPTOLIST_SELECTOR.prop('disabled', true);
return;
} else {
MAPTOLIST_SELECTOR.prop('disabled', false);
console.log("UI field rules found memo");
}
}
};

然后,我在加载所有字段时调用该对象。

UIFieldRules.MapToList.call(field);

这工作正常并满足了任务,但现在我需要对字段应用更多规则。 (如果你以前听过这个,请阻止我)

如何获得此集合,只需将规则添加到集合中,并在 javascript 中动态应用它们?

更新提供示例:

function MapToList(field){
isBoolean:function(){}
isMemo : function(){}
execute : function(){
if (UIFieldRules.isMemo.call(this) || UIFieldRules.isBoolean.call(this)) {
console.log("memo or bool");
console.log(UIFieldRules.isMemo.call(this));
console.log(this);
MAPTOLIST_SELECTOR.prop('disabled', true);
return;
} else {
MAPTOLIST_SELECTOR.prop('disabled', false);
console.log("UI field rules found memo");
}
}
}

然后,如果我想创建更多规则(我确实这么做了),我应该创建另一个像上面那样的对象吗?在 JS 中是否有最佳实践方法?

var rules = [];
rules.push(new MapToList(field));
rules.push(new RegExEnabled(field));

$.each(rules,function(item){
item.execute();
});

最佳答案

您的示例方法非常好。创建多个都实现相同接口(interface)的对象,将它们放入一个列表中,然后对每个对象调用一个公共(public)方法:

var rules = [MapToList, RegExEnabled];

rules.forEach(function(item){
item.execute(field);
});

但是,您可能需要注意,如果您的对象没有状态或没有任何参数化,通常不需要构造函数 + new ,一个简单的对象文字就足够了。< br/>同样,如果您的共享接口(interface)归结为单个 execute 方法,那么您真正想要的不是对象列表,而只是您可以调用的函数列表。 It's not Java :-)

关于javascript - 如何有效地在对象上应用许多不同的规则并使用 JavaScript 的面向对象技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498483/

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