JavaScript 中的原型

2024-01-27

在 JavaScript 中,您可以通过多种不同的方式完成同一件事。

考虑以下示例:

1:

function Circle(radius) {
 return {
  "r" : radius,
  "area" : function(){
   return Circle.pi * this.r * this.r; 
  }
 }
}
Circle.pi = 3.14159;

var a = Circle(10);
alert(a.area());

2:

function Circle(radius) {
    this.r = radius;
}

Circle.pi = 3.14159;
Circle.prototype.area = function(){
 return Circle.pi * this.r * this.r; 
}

var a = new Circle(10);
alert(a.area());

第二个比第一个更好,因为我们没有定义相同的函数area对于任何一个实例Circle.

但让我们考虑一下 3:

function Circle(radius) {
 return {
  "r" : radius,
  "area" : Circle.area
 }
}
Circle.pi = 3.14159;
Circle.area = function(){
 return Circle.pi * this.r * this.r; 
}

var a = Circle(10);
alert(a.area());

有什么理由选择第二种而不是第三种?或者我根本误解了什么?


我肯定会选择示例 2。示例 1 或示例 3 都没有充分利用 JavaScript 的面向对象功能,因为:

  1. 您在每个实例中复制方法定义。
  2. 通过返回一个新对象而不是使用this,你失去了班级的身份,即你不能再进行像这样的检查a instanceof Circle.
  3. 因为您不使用原型,所以您放弃了继承的可能性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的原型 的相关文章