使用或不使用原型之间的区别:它们显然也在做同样的事情

Difference between using or not using prototype: they seem apparently to do the same

本文关键字:原型 之间 区别      更新时间:2023-09-26

使用和不使用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和没有它的"颜色"对象的真正含义是什么?

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

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

当您声明一个新类型(例如"矩形"(时,差异就来了,您为其声明了rectangle.prototype = poligon.prototype; .现在,您的矩形类将继承 poligon 原型中声明的所有方法,如果您只是将方法添加到 'poligon',情况就不是这样了。

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

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

Poligon.print = function() {};
new Poligon().print(); // Has no method print
Poligon.prototype.print = function() {};
new Poligon().print(); // Tah dah!