Reputation: 779
function Obj1(name){
this.__proto__={
Name:name,
getName:function(){
alert(this.Name);
}
};
}
function Obj2(name){
this.prototype={
Name:name,
getName:function(){
alert(this.Name);
};
};
}
x=new Obj1("blue shark");
z=new Obj2("red shark");
x.getName();
z.getName();// error:z.getName() is not a function
What is the difference between the two?Some say prototype
is used for constructor functions only but in this case it doesn't work.... instead the __proto__
work why?
Upvotes: 2
Views: 269
Reputation: 114511
__proto__
is not a standard property.
Anyway every object created by new
will get a prototype from the .prototype
member of the constructor (a function). Note that the prototype member has no name, you cannot access it directly, you need Object.getPrototypeOf(x)
.
If you want to create an object with a given prototype the code is Object.create(proto)
that is more or less equivalent to
function makeObjectWithPrototype(x) {
function makeit() { }
makeit.prototype = x;
return new makeit();
}
Upvotes: 2
Reputation: 276306
__proto__
(which is not standard (but might be soon))) sets an object's prototype.
.prototype
sets the prototype of objects created by invoking the function it was set on as a constructor using new
Also worth mentioning is Object.create
Here are examples:
Pseudo-classical with .prototype
:
function Car(){
this.x = 15;
}
Car.prototype.y = 10;
var g = new Car();
g.y; // this is 10;
Using __proto__
(don't use this!):
var g = {x:15};
g.__proto__ = {y:10};
g.y; // this is 10;
This way is correct, and does not use constructors with new
:
var g = Object.create({y:10}); //creates x with prototype {y:10}
g.x = 15;
g.y; // this is 10
Here is an interesting tutorial on MDN covering these.
Upvotes: 5
Reputation: 160853
Only functions has the property prototype. You need to set the prototype on the function self.
function Obj2(name){
this.name = name;
}
Obj2.prototype={
getName:function(){
alert(this.Name);
}
};
Upvotes: 2