2

Can I define an object as a prototype member? If yes then how can I stop the call by reference of an instantiated object?

function MediaUser (){
}

MediaUser.prototype.oThumb = {sUrl: 'noImage.png'};

var oMediaUser = new MediaUser();
var oMediaUser2 = new MediaUser();

oMediaUser.oThumb.sUrl = "a.png";

console.log(oMediaUser2.oThumb.sUrl); // prints a.png 
Michał Perłakowski
  • 88,409
  • 26
  • 156
  • 177
Gan
  • 937
  • 8
  • 22

2 Answers2

2

Everything you define in prototype is shared by all objects. You have to put that inside the constructor if you want it to be different for all instances:

function MediaUser (){
  this.oThumb = {sUrl: 'noImage.png'}
}

var oMediaUser = new MediaUser();
var oMediaUser2 = new MediaUser();

oMediaUser.oThumb.sUrl = "a.png";

console.log(oMediaUser2.oThumb.sUrl); // prints noImage.png 
Michał Perłakowski
  • 88,409
  • 26
  • 156
  • 177
  • so @Gothdo, anytime if I want to add an object inside another object, I always have to put it as an instance member rather than prototype member ? – Gan May 23 '16 at 18:41
0

In fact when you are looking for separate value for each object , get rid of thet prototype property altogether

function MediaUser (url){
 this.sUrl = url || 'noImage.png';
}


var oMediaUser = new MediaUser("a.png");
var oMediaUser2 = new MediaUser();

console.log(oMediaUser.sUrl); // prints a.png

console.log(oMediaUser2.sUrl); // prints noImage.png
sapy
  • 8,952
  • 7
  • 49
  • 60