2013-02-07 419 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()方法。讓我們看看未來會是什麼。