According to the lodash docs , _.extend(object, [sources])
改变第一个参数。
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 中的错误吗?有解决方法吗?
最佳答案
解决方案是配置 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>
我将 KnockoutJS 与定义为函数的 viewModel 一起使用,这需要改变 this
。如果我不想禁用 lodash/fp 的不可变性,我可以将我的 viewModel 定义为对象文字。 More here.
关于javascript - lodash/fp _.extend 不会像在 lodash 中那样改变第一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39068430/