function Obj1(name){
this.__proto__={
Name:name,
getName:function(){
alert(this.Name);
}
}
__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.
__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();
}
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);
}
};