是否有更好的写作方式?我正在使用Dojo。也许混合会起作用吗?
ajaxValidate: function(value, options){
// Set some defaults
options.ajaxInvalidMessage = options.ajaxInvalidMessage || "Value not allowed";
options.ajaxStore = options.ajaxStore || null;
options.ajaxFilterField = options.ajaxFilterField || 'name';
似乎没有||=
运算符,这看起来非常详细...
答案 0 :(得分:2)
您展示的方法:
obj.prop = obj.prop || "default";
...是一个非常常见的习语,但我个人觉得if语句更具描述性,即使它实际上添加了几个字符:
if (!obj.prop) obj.prop = "default";
如果你想要一个更通用的方法,你可以写一个类似下面的函数(我不熟悉Dojo - 也许它已经有了这样的函数):
function addDefaults(obj, defaults) {
for (prop in defaults)
if (!obj.hasOwnProperty(prop))
obj[prop] = defaults[prop];
}
然后您将在代码段中使用:
ajaxValidate: function(value, options){
addDefaults(options, {
ajaxInvalidMessage : "Value not allowed",
ajaxStore : null,
ajaxFilterField : 'name'
});
请注意,在我的addDefaults()
我正在使用hasOwnProperty()
method来测试对象中是否存在该属性。这与您开始使用的||
语法略有不同,后者会测试该属性是否为“truthy”。
答案 1 :(得分:1)
使用mixin是一种更清洁的方法。这样,您还可以将默认值明确地分组到单个对象中。
http://dojotoolkit.org/reference-guide/1.7/dojo/mixin.html
ajaxValidate: function (value, options) {
options = dojo.mixin({
ajaxInvalidMessage: "Value not allowed",
ajaxStore: null,
ajaxFilterField: "name"
}, options);
//...
}