【发布时间】:2014-06-08 06:52:38
【问题描述】:
我创建了一个具有一系列属性的 Javscript 原型对象。我需要将其中一些属性传递给一个函数。该函数处理属性并返回一些结果。
function ObjCt(id,data) {
this.id = id;
this.data = data;
}
所以,我正在尝试将图表对象的数据传递给函数。我称它为:
var obj=new ObjCt(id,data);
process(obj.id,obj.data);
我从某处了解到,在 JS 中传递值会导致按值调用,而传递对象会导致按引用调用。在这里,我尝试按值调用,但是,似乎process() 函数中发生的任何处理都反映在对象obj 中。
我使用typeof 检查了在处理函数中收到的变量,它显示为“对象”而不是变量。那么,我该怎么做才能将这些数据作为值传递呢?
编辑
我发现了一个相当烦人的解决方法。 id 是原始的,data 是 JSON 对象。所以,我在process() 函数中尝试了这个
JSON.parse(JSON.stringify(data))
显然,这里所有的引用都被删除了。我现在有一个可行的实现,但是,我仍然很想看看是否有更简单的方法将属性作为值传递。
编辑
解决了这个问题。根据保罗的回答,尝试了正常的逐步克隆和另一种使用 jquery 扩展方法的替代方法,如下所示
var object=$.extend(true,{},oldObject);
并将新创建的对象传递给process() 函数。
请参考此链接:What is the most efficient way to deep clone an object in JavaScript?
【问题讨论】:
-
id和data是原始的吗? -
您要做的是克隆对象。你可以在这里读更多关于它的内容。 stackoverflow.com/questions/3774008/cloning-a-javascript-object
-
抱歉遗漏了:id 是原始的,data 是 JSON。
-
@Smeegs:对于这么小的结果,似乎需要做很多工作。真的没有别的办法了吗?
-
实际的 JSON(一个字符串)还是大家认为的 JSON 是什么(一个对象)?
标签: javascript