使用默認值初始化對象我正在使用Underscore的default函數。根據該文件,它的工作原理是這樣的:Underscore.js默認功能的副作用免費版本?
var foo = _.defaults(object, *defaults)
它被描述爲:在未定義的屬性的對象從默認對象
填充值,並返回對象。一旦財產被填補,進一步的違約將不會生效。
雖然它基本上工作正常,但有一件事我總是偶然發現:操縱原始對象的副作用。
如果我運行
var foo = { bar: 'baz' };
,然後說
var bar = _.defaults(foo, { dummy: 23 });
不僅,bar
有一個名爲dummy
財產,原來foo
對象已經改變了。我目前的解決方法是:
var bar = _.defaults({}, foo, { dummy: 23 });
不幸的是,你可以很容易地忘記這一點。我認爲這是一個奇怪的行爲,defaults
函數更改輸入參數並將結果作爲返回值返回。它應該是或者。
你如何處理這種情況?有沒有更好的方法來處理這個問題?
我完全同意你的看法。一般而言,變更參數是一種反模式,因爲它會產生非明顯的副作用。我很驚訝這種行爲是由許多框架如下劃線和lodash選擇的。我相信它誘使開發人員編寫錯誤的代碼。 –