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 = 新しい車(); var obj2 = 新しい車(); var obj3 = 新しい車();

そして私はそれらを配列に入れました

いいえ。実際には、作成したオブジェクトを指す 3 つの参照 (オブジェクトへのポインター) があります。これらの参照を配列に入れます。

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 に答える