Прототипы в JavaScript

В 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());

Есть ли причина предпочесть второй стиль третьему? Или я вообще что-то не понял?

5
задан Dan 28 August 2010 в 20:31
поделиться