ope*_*pes 14 javascript function object
在道格拉斯·克罗克福德(Douglas Crockford)的书"Javascript:The Good Parts"中,他提到了将值传递给一个新对象的对象说明符.本质上,他建议不要以特定的顺序将参数传递给函数,而是建议传递一个包含在其中的参数的对象,如下所示:
var myObject = someFunction({a: 1, b: 2, c: 3});
Run Code Online (Sandbox Code Playgroud)
然而,没有解释的是如何在它们通过之后处理这些参数.而不是执行以下操作来设置默认值:
function someFunction(params){
this.a = params.a || 0;
this.b = params.b || 0;
...
}
Run Code Online (Sandbox Code Playgroud)
处理大量参数而不是冗长的另一种方法是什么?
编辑:看看下面的答案,使用for-in循环是一个很好的选择.在为每个属性设置不同的默认值时,另一种方法是什么?有没有办法创建一个具有各种默认值的对象并与之进行比较?
通常使用一个defaults对象来完成,如果它们不存在于参数中,则可以从中复制属性.该对象可能是私有的,也可供公众用于配置.
var defaults = { a:null, b:1, ...};
function someFunction(params) {
for (var prop in defaults)
if (prop in params)
this[prop] = params[prop];
else
this[prop] = defaults[prop];
}
Run Code Online (Sandbox Code Playgroud)
要么
function someFunction(custom) {
var params = { a:null, b:1, ...};
for (var prop in custom)
params[prop] = custom[prop];
// now use params
}
Run Code Online (Sandbox Code Playgroud)
有时候custom/params传递给函数的对象也会自己扩展,但是在文档中应该明确提到对象可以被修改:
var defaults = { a:null, b:1, ...};
function someFunction(params) {
// modifies params object!
for (var prop in defaults)
if (! (prop in params))
params[prop] = defaults[prop];
// now use params
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用具有函数的库extend,则通常可以将此初始化缩短为
var params = $.extend({}, defaults, custom);
// create an empty object, copy the defaults, and overwrite with custom properties
Run Code Online (Sandbox Code Playgroud)