javascript - lodash/fp _.extend 不会像在 lodash 中那样改变第一个参数

标签 javascript lodash

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/

相关文章:

javascript - 从 Firefox 扩展中清除 innerHTML 的最佳方法

javascript - 有没有办法禁用设备 sleep ?

javascript - 我可以使用 Lodash 来 "collapse"对象数组吗?

javascript - 仅克隆不是函数的属性

javascript - lambda 长深

javascript - 为什么我的表单没有提交

javascript - 需要图像最大化 HTML 页面中的鼠标悬停

javascript - 使用lodash在执行setTimeout时触发两个函数

javascript - 如何在javascript中向上键的文本字段中的两位数字后添加点?

javascript - 如何使用 lodash 的 ._get 方法检查路径的 2 个值