1

使用或不使用有什么区别prototype?他们显然也是这样做的。

prototype

function poligon(angles){
     this.angles = angles;
}
poligon.prototype.color = function(){ return "blue"; }

var mypol = new poligon(14);

alert(mypol.color());

没有prototype

function poligon(angles){
     this.angles = angles;
}
poligon.color = function(){ return "blue"; }

var mypol = new poligon(12);

alert(poligon.color());

添加带有prototype和不带有它的“颜色”对象的真正含义是什么?

4

2 回答 2

2

是的,当引入 javascript 原型时,这并不总是很清楚。

如果您向原型添加一个方法,那么从该原型继承的每个对象都将从那时起具有此功能。在这种情况下,您的类/函数“poligon”可能是唯一从该原型继承的类。

当您声明一个新类型时,区别就出现了,例如,“矩形”,您为其声明rectangle.prototype = poligon.prototype;. 现在,您的矩形类将继承在 poligon原型中声明的所有方法,如果您只是将方法添加到“poligon”,则不会出现这种情况。

继承在 javascript 中的工作方式不同,并且在来自经典 OOP 语言时有时会非常混乱。

于 2013-04-17T09:18:00.793 回答
1

通过像您一样使用原型没有区别,但是当您创建从对象派生的新对象时,原型会派上用场Poligon

Poligon.print = function() {};
new Poligon().print(); // Has no method print

Poligon.prototype.print = function() {};
new Poligon().print(); // Tah dah!
于 2013-04-17T09:19:57.140 回答