javascript中options对象的默认值
有没有更好的方法写这个?我正在使用Dojo。也许加入会有用吗javascript中options对象的默认值,javascript,dojo,Javascript,Dojo,有没有更好的方法写这个?我正在使用Dojo。也许加入会有用吗 ajaxValidate: function(value, options){ // Set some defaults options.ajaxInvalidMessage = options.ajaxInvalidMessage || "Value not allowed"; options.ajaxStore = options.ajaxStore || null; options.ajax
ajaxValidate: function(value, options){
// Set some defaults
options.ajaxInvalidMessage = options.ajaxInvalidMessage || "Value not allowed";
options.ajaxStore = options.ajaxStore || null;
options.ajaxFilterField = options.ajaxFilterField || 'name';
似乎没有| |=
运算符,我觉得它非常冗长…您显示的方法:
obj.prop = obj.prop || "default";
…是一个非常常见的习语,但我个人认为if语句更具描述性,尽管它实际上添加了几个字符:
if (!obj.prop) obj.prop = "default";
如果您想要一种更通用的方法,您可以编写如下函数(我不熟悉Dojo,也许它已经有了这样的函数):
然后在代码段中使用它作为:
ajaxValidate: function(value, options){
addDefaults(options, {
ajaxInvalidMessage : "Value not allowed",
ajaxStore : null,
ajaxFilterField : 'name'
});
请注意,在我的
addDefaults()
中,我使用了测试对象中是否存在该属性的。这与您开始使用的测试属性是否为“truthy”的|
语法略有不同。使用mixin是一种更干净的方法。这样,您还可以显式地将默认值分组到单个对象中
ajaxValidate: function(value, options){
addDefaults(options, {
ajaxInvalidMessage : "Value not allowed",
ajaxStore : null,
ajaxFilterField : 'name'
});
ajaxValidate: function (value, options) {
options = dojo.mixin({
ajaxInvalidMessage: "Value not allowed",
ajaxStore: null,
ajaxFilterField: "name"
}, options);
//...
}