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
两者之间有什么区别?有人说prototype
仅用于构造函数,但在这种情况下它不起作用....而__proto__
工作为什么?
答案 0 :(得分:5)
__proto__
(这不是标准的(但可能会很快)))设置对象的原型。
.prototype
设置通过使用new
另外值得一提的是Object.create
以下是示例:
.prototype
的伪古典:
function Car(){
this.x = 15;
}
Car.prototype.y = 10;
var g = new Car();
g.y; // this is 10;
使用__proto__
(不要使用此内容!):
var g = {x:15};
g.__proto__ = {y:10};
g.y; // this is 10;
这种方式是正确的,并且不使用带new
的构造函数:
var g = Object.create({y:10}); //creates x with prototype {y:10}
g.x = 15;
g.y; // this is 10
答案 1 :(得分:2)
只有函数具有属性原型。 您需要在函数self上设置原型。
function Obj2(name){
this.name = name;
}
Obj2.prototype={
getName:function(){
alert(this.Name);
}
};
答案 2 :(得分:2)
__proto__
不是标准财产。
无论如何,new
创建的每个对象都将从构造函数的<{1}}成员 (函数)中获取原型。请注意,原型成员没有名称,您无法直接访问它,您需要.prototype
。
如果要创建具有给定原型的对象,则代码Object.getPrototypeOf(x)
或多或少等同于
Object.create(proto)