underscore-contrib 不能使用 _.snapshot 函数

underscore-contrib can't use the _.snapshot function

我在我的项目中使用 underscore.js 库(版本 1.8.3),在我需要深度克隆对象的脚本之一上,因为 _.clone(obj) 函数只做了一个浅克隆,我添加了我从源代码库中获取的 underscore-contrib(版本 0.3.0)库

<script type="text/javascript" src="underscore-min.js"></script>
<script type="text/javascript" src="underscore-contrib.min.js"></script>

并尝试像这样使用 _.snapshot(obj) 函数

var clonedData = _.clone(data); // works 
var snapshotData = _.snapshot(data); // doesn't work

没成功,控制台显示

TypeError: _.snapshot is not a function

最终我尝试了 "hack it",我已经将开发版本中的函数内容复制粘贴到我脚本中的一个函数中,它运行良好,但是有点难看,我想避免重复并正确使用它。我错过了什么?

您需要包含特定的 underscore-contrib 库 - 在您的情况下是 object.builders - 在您的示例中:

var data = {x:3,y:{z:5}};
var snapshotData = _.snapshot(data); // doesn't work

data.y.z = 3;
document.body.innerHTML = JSON.stringify(snapshotData);
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://rawgit.com/documentcloud/underscore-contrib/master/underscore.object.builders.js"></script>

就我个人而言 - 我会使用 lodash,它已经具有 _.cloneDeep 方法并且已经模块化且速度更快。