Javascript 如何禁用JS中的指针使用?
为什么结果是{a:b,c:1} 如何禁用此行为?foo和bar变量都引用同一个对象。使用哪个引用修改该对象并不重要 您不能禁用该行为,这就是JavaScript和许多其他主要语言的工作方式。您所能做的就是显式克隆对象Javascript 如何禁用JS中的指针使用?,javascript,json,pointers,reference,Javascript,Json,Pointers,Reference,为什么结果是{a:b,c:1} 如何禁用此行为?foo和bar变量都引用同一个对象。使用哪个引用修改该对象并不重要 您不能禁用该行为,这就是JavaScript和许多其他主要语言的工作方式。您所能做的就是显式克隆对象 var foo = {"a":"b","c":0}; var bar = {"a":foo.a, "c": foo.c}; bar.c++; 您不能禁用javascript的工作方式 如果更改引用对象,它会影响所有对象引用…首先,Javascript不传递指针,它传递引用,略有不
var foo = {"a":"b","c":0};
var bar = {"a":foo.a, "c": foo.c};
bar.c++;
您不能禁用javascript的工作方式
如果更改引用对象,它会影响所有对象引用…首先,Javascript不传递指针,它传递引用,略有不同。其次,不幸的是,幸运的是,没有办法修改Javascript的默认行为 您可能想做的是创建一个构造函数,并使用它创建一个对象的两个相似但独立的实例
function Foo(a, b) {
this.a = a;
this.b = b;
}
var bar1 = new Foo(0, 0);
var bar2 = new Foo(0, 0);
bar2.b++;
console.log(bar1);
console.log(bar2);
>> {a:0, b:0};
>> {a:0, b:1};
您所做的是对一个对象进行第二次引用,但您似乎想要的是该对象的副本 如果您需要该功能,那么您确实需要一个复制功能,将所有属性逐个复制到新对象中:
// Take all the properties of 'obj' and copy them to a new object,
// then return that object
function copy(obj) {
var a = {};
for (var x in obj) a[x] = obj[x];
return a;
}
var foo = {"a":"b","c":0};
var bar = copy(foo);
bar.c++;
alert(JSON.stringify(foo));
你会得到{a:b,c:0}你期望的结果是什么?可能是@Quentin的重复。我不确定它是否是复制品,尽管它回答了他的问题。@Quentin:这可能是回答这个问题的方法,但它不是真正的复制品。在这种情况下,不幸的是=>幸运的是,我同意你的看法,但对于作品来说是不幸的。嘿。
// Take all the properties of 'obj' and copy them to a new object,
// then return that object
function copy(obj) {
var a = {};
for (var x in obj) a[x] = obj[x];
return a;
}
var foo = {"a":"b","c":0};
var bar = copy(foo);
bar.c++;
alert(JSON.stringify(foo));