0

可以说我有这样声明的树对象:

var obj1 = new Car();
var obj2 = new Car();
var obj3 = new Car();

我把它们放在一个数组中

var myArray = [];
myArray.push(obj1);
myArray.push(obj2);
myArray.push(obj3);

最后,如果我这样做:

var firstElement = myArray.shift();

这让我想知道:

firstElement是对obj1的引用还是它的副本?例如,如果我更改firstElement的某些属性会影响obj1变量吗?

4

2 回答 2

1

答:它是元素的(副本)。但是元素是什么?与 Java 一样,JavaScript 中的每个值要么是原始值,要么是引用(指向对象的指针)。“对象”不是 JavaScript 中的值。对象只能通过引用(指向对象的指针)进行操作。

可以说我有这样声明的树对象:

var obj1 = new Car(); var obj2 = new Car(); var obj3 = new Car();

我把它们放在一个数组中

不,您实际上有三个引用(指向对象的指针),它们指向您创建的对象。您将这些引用放入数组中。

firstElement 是对 obj1 的引用还是它的副本?例如,如果我更改 firstElement 的某些属性会影响 obj1 变量吗?

firstElement是副本obj1,参考。如果您更改 所指向的对象的某些属性firstElement,那么它当然是可见obj1的,因为它们指向同一个对象。

于 2013-04-23T02:38:16.580 回答
-1

通过参考,请查看此 jsfiddle 以获取证据:

http://jsfiddle.net/3wntu/1/

HTML:

<div >Shifted obj title: <span  id='display1'></span></div>
<div >firstObj title: <span  id='display2'></span></div>
<div >obj1 title: <span  id='display3'></span></div>

js:

var myArray = [],
    firstElement = {},
    obj1 = {title:'obj1'},
    obj2 = {title: 'obj2'},
    obj3 = {title: 'obj3'};

myArray.push(obj1);
myArray.push(obj2);
myArray.push(obj3);

firstElement = myArray.shift();

document.getElementById("display1").innerHTML = firstElement.title;

//change the objects name
firstObj.title = "firstElement";

//output the reference object title
document.getElementById("display2").innerHTML = firstElement.title;

//output the original output - should be the same as the altered reference title
document.getElementById("display3").innerHTML = obj1.title;
于 2013-04-22T21:54:58.177 回答