2013-02-07 70 views
0

我想有params成员的哈希与defaults默认值:默认哈希值

var defaults = { item1: "def1", item2: "def2" }; 
var params = { item2: "param2", item3: "param3" }; 
var result = // some clever code here... 
console.log(result); // { item1: "def1", item2: "param2", item3: "param3" }; 

最聪明的代码,我可以找出是迭代defaults成员,并将其添加到params如果他们在那里失踪。我想知道是否有一些本地解决方案,而不是编写自己的代码?原型设计看起来很有前途,但它只适用于功能对象,我不想在这里。有什么想法吗?

+0

此功能在不同的JavaScript库,如jQuery和Underscore.js提供。它通常被称为'extend'。 – lonesomeday

+0

确实如此,但编写自己的单行代码非常容易。我想知道是否有一些本地解决方案? –

+1

(a)这些库提供它并且(b)在它们的实现中不使用本地解决方案的事实强烈地暗示我没有。 – lonesomeday

回答

0

如果有人仍感兴趣的是:经过近两年了,我想在这个问题中提到的巧妙代码将

__proto__: Object.create(defaults) 

见例如:

var defaults = { item1: "def1", item2: "def2" }; 
var params = { item2: "param2", item3: "param3", 
    __proto__: Object.create(defaults) }; 

for(var i in params) console.log(i,params[i]); 
// item2 param2 
// item3 param3 
// item1 def1 

只要记住的是, __proto__deprecated,但是很好的支持,不像链接建议的setPrototypeOf()方法。让我们看看未来会是什么。