Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何禁用JS中的指针使用?_Javascript_Json_Pointers_Reference - Fatal编程技术网

Javascript 如何禁用JS中的指针使用?

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不传递指针,它传递引用,略有不

为什么结果是{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不传递指针,它传递引用,略有不同。其次,不幸的是,幸运的是,没有办法修改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));