Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JAVASCRIPT - Why isn't this object changed?

function myFunc(theObject) {  
  theObject = {make: "Ford", model: "Focus", year: 2006};  
}  
var mycar = {make: "Honda", model: "Accord", year: 1998};  
var x = mycar.make;     // returns Honda  
myFunc(mycar);  
var y = mycar.make;     // still returns Honda  

Why doesn't myFunc change the mycar object??

like image 726
DarkLightA Avatar asked Sep 29 '26 23:09

DarkLightA


2 Answers

When you do theObject = { ... } within myFunc, you are creating a new object and assigning its reference to the local variable theObject. This does not change the original object.

To modify the contents of the original object, you need to directly modify its properties like this:

theObject.make = 'Ford';
theObject.model = 'Focus';
theObject.year = 2006;
like image 89
casablanca Avatar answered Oct 02 '26 14:10

casablanca


The question is already answered, just to make it even clearer:

function myFunc(theObject) {  
      theObject = {make: "Ford", model: "Focus", year: 2006};  
} 

is something similar (forget the syntax, get the message) to:

function myFunc(theObject) {  
      theObject = new TheObject("Ford","Focus",2006);  
} 

in other words, the parameter is referenced but you are changing that reference by constructing a new object.

Note: Since Java syntax is so popular I thought of using a JAVA-like syntax in order to explain, with didactic purposes, that you're creating a whole new instance. "TheObject" would be the name of the class.

like image 44
Ivan Arrizabalaga Avatar answered Oct 02 '26 12:10

Ivan Arrizabalaga



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!