Javascript中的对象说明符
在Douglas Crockford的书“Javascript:好的部分”中,他在向新对象传递值时提到了对象说明符。本质上,他建议传递包含参数的对象,而不是按特定顺序将参数传递给函数,如下所示:Javascript中的对象说明符,javascript,function,object,Javascript,Function,Object,在Douglas Crockford的书“Javascript:好的部分”中,他在向新对象传递值时提到了对象说明符。本质上,他建议传递包含参数的对象,而不是按特定顺序将参数传递给函数,如下所示: var myObject = someFunction({a: 1, b: 2, c: 3}); 但是,没有解释的是,在传递这些参数之后如何处理它们。不要执行以下操作来设置默认值: function someFunction(params){ this.a = params.a || 0;
var myObject = someFunction({a: 1, b: 2, c: 3});
但是,没有解释的是,在传递这些参数之后如何处理它们。不要执行以下操作来设置默认值:
function someFunction(params){
this.a = params.a || 0;
this.b = params.b || 0;
...
}
还有什么方法可以处理大量参数而不至于太冗长
编辑:查看下面的答案,使用for-in循环是一个很好的选择。在为每个属性设置不同的默认值时,还有什么方法可以做到这一点?是否有方法创建具有各种默认值的对象并与之进行比较?循环通过作为参数传递的对象中的字段,将每个字段创建为此对象上的字段
function someFunction(params){
for(x in params){
this[x] = params[x];
}
}
工作示例:使用for in循环如何
function someFunction(params){
for(var key in params){
if( params.hasOwnProperty(key){
var def = null;
if(key == 'a' || key == 'b'){
def = 10;
}
if(key == 'c' || key == 'd'){
def = undefined;
}
this[key] = params[key] || def ;
}
}
}
通常使用
默认值
对象完成,如果参数中不存在属性,则可以从该对象复制属性。该对象可能是私有的,或可供公共配置
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];
}
或
有时传递到函数中的自定义/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
}
如果使用带有extend
函数的库,通常可以将此初始化缩短为
var params = $.extend({}, defaults, custom);
// create an empty object, copy the defaults, and overwrite with custom properties
扩展Bergi的答案:
var params=$.extend({},默认值,自定义)代码>
现在,我们可以在ES6中使用Object.assign({},默认值,自定义)
,而无需任何库。您可以拥有一个“标准”对象,您可以在某种循环中将输入与之进行比较。jQuery插件通常处理这个问题的方式(尽管使用jQuery)可能也很有趣:请注意,逐个执行参数可以让您单独指定默认值(m90建议的默认对象也允许这样做),或者,如果没有提供某些参数,则采取特殊措施。m90&nnnnnn:如果您想举例说明答案,我已经更新了我的问题,以说明不同的默认值。注意;)不过有一点,我认为指出这只是一个肤浅的复制是恰当的。但这可能是我想要的。这是对我最初问题的一个很好的回答。如果您想编辑它以解释不同的默认值,我将非常感激。@sprawl。。不同的默认值是什么意思?此函数绝对不起作用。它枚举给定的params
参数,但当您省略a
或b
时,null
也不会被用作默认值。@Sushanth--您将其设置为null,如果您想根据默认值的对象将其设置为其他值,该怎么办?例如,你想要这个.a等于,比如说,如果没有任何输入,你想要这个.b等于7,或者类似的东西。对于我的问题,这绝对是最干净的解决方案。这正是我想要的。
var params = $.extend({}, defaults, custom);
// create an empty object, copy the defaults, and overwrite with custom properties