2013-04-22 74 views
0

可以说我有树对象声明如下:JavaScript shift()方法返回元素的引用还是副本?

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(); 

它使我想知道:

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

+1

如果它是一个对象,它是参考的副本。但是你所推的是'undefined',因为你没有创建任何对象。 – 2013-04-22 21:37:16

+0

好吧,你是对的!我会修好它! – 2013-04-22 21:47:01

回答

-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; 
1

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

可以说我有声明如下树对象:

VAR OBJ1 =新车(); var obj2 = new Car(); var obj3 = new Car();

,我把它们放在一个数组

号你确实有三个引用(对象指针),该点对象所创建。你把这些引用放在数组中。

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

firstElementobj1的参考文献的副本。如果更改firstElement指向的对象的某些属性,那么当然它可以通过obj1显示,因为它们指向相同的对象。