Какой рекомендуемый способ объявить поля класса в JavaScript? - PullRequest
0 голосов
/ 14 июня 2010

Лучше ли объявлять поля класса следующим образом:

function MyClass() {
   this.aMethod = function() {
     // code
   }
}

Или так:

function MyClass() {
}

MyClass.prototype.aMethod = function() {
  // code
}

Любой, почему?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 14 июня 2010

Как сказал @ meder , подход прототипа является предпочтительным способом, поскольку методы объявлены в прототипе конструктора, но первый показанный нами подход полезен для реализации закрытых членов , например:

function MyClass() {
   var privateValue = 'secret';

   function privateMethod() { }

   this.aMethod = function() {
     // privateValue and privateMethod are accessible here.
     return privateValue;
   }
}

var foo = new MyClass();
foo.aMethod(); // "secret"
foo.privateValue; // undefined !

Это то, что Крокфорд называет привилегированным методом , поскольку этот метод имеет доступ ко всем идентификаторам, созданным в лексической области видимости:конструктор ( замыкание создано).

2 голосов
/ 14 июня 2010

Метод prototypal, потому что он более эффективен, так как добавляет функцию к прототипу, что означает, что любые объекты, созданные с помощью конструктора, автоматически получают этот метод, в то время как первый / первый способ эти методы должны быть созданы для каждого маленького объекта, который высделать индивидуально.

Хотя на самом деле это зависит от того, что вы делаете с методом.Если вам не нужен публичный метод, вы можете выбрать this.method или оператор функции.

0 голосов
/ 14 июня 2010

Это зависит от использования. Используйте первый метод, когда вы собираетесь использовать метод часто; во-вторых, когда вы собираетесь использовать его редко. Причина в том, что когда объект создается с помощью конструктора, методы-прототипы не загружаются, они загружаются только при вызове, что позволит вам сэкономить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...