开发者

Setting one object equal to another object with the assignment operator in Javascript

开发者 https://www.devze.com 2022-12-14 12:36 出处:网络
I\'m coming to javascript from C background. In javascript, when I use the assignment operator to assign one object to another, does it copy the values from one to the another, or do they both now poi

I'm coming to javascript from C background. In javascript, when I use the assignment operator to assign one object to another, does it copy the values from one to the another, or do they both now point to the same data?. Or does the assignment operator do anything in this case?

function point_type()
 {
 this.x = 0;
 this.y = 0;
 }

var pnt1 = new point_type();
var pnt2 = new point_type();

pnt1.x = 4;
pnt1.y = 5;

pnt2 = pnt1;

pnt1.x = 8;
pnt2.y = 9;

In the example above, does pnt2.x now equal 8, or does it still equal 4, or does it still equal 0?

Yes, I realize I can test this myself, and I will be doing that while I wait for the community to come up with an answer. However, I'm hoping the answer to my question will go one step past just answering this one example and might shine some light on how javascript objects work and some best practices.

Follow up question:

The answer seems to be that the reference is copied. pnt2 and pnt1 now point to the same data. Is it possible to set up my object so that the values are copied? How is this usually accomplished i开发者_如何学JAVAn javascript? Clearly I don't want to set each attribute individually every time I need to copy this object.


Whenever I need to copy one object to another in JS, I just cast it to a primitive:

var newObject = JSON.stringify(oldObject);

Then when I need to use it:

var evenNewerObj = JSON.parse(newObject);

Hope this helps someone.


In JavaScript, primitive types are copied by value and reference types are copied by reference. More info here: http://docstore.mik.ua/orelly/web/jscript/ch09_03.html


It equals 8.

pnt2 = pnt1

That statement is pointing the pnt2 object to the pnt1 object so any modification you do to pnt1 will show up in pnt2.


Given the object you showed in your example, it is setting a reference to the object. If it were a primitive type (number, date) then it would copy the object.

0

精彩评论

暂无评论...
验证码 换一张
取 消