2016-08-21 18 views
1

According to the lodash docs_.extend(object, [sources])突變第一個參數。lodash/fp _.extend不像它在lodash中那樣突變第一個參數

var dest = { 
 
    a: 1 
 
}; 
 
_.extend(dest, { 
 
    b: 2 
 
}); 
 

 
// expect { "a": 1, "b": 2 } 
 
// actual { "a": 1, "b": 2 } 
 
console.log(dest);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.js"></script>

當使用lodash/fp的,不是這種情況argument order is unchanged

var dest = { 
 
    a: 1 
 
}; 
 
_.extend(dest, { 
 
    b: 2 
 
}); 
 

 
// expect { "a": 1, "b": 2 } 
 
// actual { "a": 1 } 
 
console.log(dest);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.js"></script> 
 
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.fp.js"></script>

這是有問題,因爲我有一個很多代碼變異this。這是lodash中的錯誤,是否有解決方法?

回答

2

的解決方案是配置lodash/FP允許突變。

var fp = _.convert({ 
 
    'immutable': false 
 
}) 
 
var dest = { 
 
    a: 1 
 
}; 
 
fp.extend(dest, { 
 
    b: 2 
 
}); 
 

 
// expect { "a": 1, "b": 2 } 
 
// actual { "a": 1, "b": 2 } 
 
console.log(dest);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.js"></script> 
 
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.fp.js"></script>

我使用與的ViewModels KnockoutJS定義爲函數,這需要突變this。如果我不想用lodash/fp禁用不可變性,則可以將我的viewModel定義爲對象文字。 More here.

1

這是不是一個錯誤:不變性是一種函數式編程特性,它在指南的最開始的陳述的:

的lodash/FP模塊推出功能更強大的編程(FP) 友好的風格通過出口lodash的一個實例,其方法 包裝以產生不可變的自動curry迭代優先數據 - 最後的 方法。

我認爲你應該重新考慮使用lodash/fp或突變,它們不能很好地一起玩。


編輯:好,我錯了,他們可以一起玩:看Musical Store's answer

+0

我明白現在,但在我的情況下,我需要改變'this'。 'this'只能被突變,不能被賦值。 –

相關問題