jQuery.从循环引用扩展safe
Is jQuery.extend safe from circular reference?
jQuery.extend
与circular reference
安全吗?
如何避免在Javascript循环引用(而克隆或递归检查)?仅仅在属性列表中检查当前目标是否存在是不够的,因为它可能引用一些外部对象。
一个选项是保留另一个列表的所有objects
获取到现在。但是这会增加内存消耗并要求停止脚本吗?
和我不想移动克隆操作在工作线程
老问题,但我今天正在寻找这个-答案是:没有。
https://api.jquery.com/jquery.extend/在深度扩展上,对象和数组被扩展,但是对象包装在基本类型上而String、Boolean和Number则不是。深度扩展循环数据结构将导致错误。
对于超出此行为的需求,编写自定义扩展方法,或者使用lodash等库。
lodash文档不是很清楚,但是_。cloneDeep支持克隆循环引用。
https://lodash.com/docs/4.17.10 cloneDeep
你最好使用像lodash这样聪明的东西,因为我认为它会正确地检测多次引用的所有对象,并创建整个对象图的真正克隆,所有循环引用都完好无损。
然而,这里有一个简单的深度克隆,它只是使用一个简单的对象堆栈来忽略循环引用(它在TypeScript中):
public static DeepClone(source: any, stack: any[] = null): any
{
if (!source)
{
return source;
}
var result;
result = Array.isArray(source) ? [] : {};
for (var k in source)
{
var v = source[k];
if (typeof v === "object")
{
stack = stack || [];
// Just ignore circular references? Or, to be clever, maintain a
// dictionary of object references from the original graph linked to
// the new objects in the cloned graph, to preserve the full graph.
if (stack.indexOf(source) >= 0)
{
return null;
}
stack.push(source);
result[k] = this.DeepClone(v, stack);
stack.pop();
}
else
{
result[k] = v;
}
}
return result;
}
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 扩展移相器按钮类不工作
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- TableExport jquery插件:文件名和扩展名问题
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 扩展SVGTextElement时出现Typescript Uncaught TypeError
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- Javascript”;类“;带有参数的扩展
- 试图阻止Chrome通过扩展关闭
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 从选项页面更新chrome扩展清单权限
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- Chrome扩展:遍历不同的页面并收集数据
- DataTable按下键选择扩展/导航
- 扩展jQuery插件以更改配置
- jQuery.从循环引用扩展safe