Функции JavaScript для моделирования классов, лучшие практики? - PullRequest
8 голосов
/ 23 ноября 2011

Я заметил, что я могу написать функции, подобные приведенной ниже, для имитации классов.Я хочу знать, если это самый современный способ сделать это.Любые комментарии приветствуются.Спасибо

function Apple(type) {
    this.type = type;
    this.color = "red";
    this.getInfo = function () {
        return this.color + ' ' + this.type + ' apple';
    };
}

var apple = new Apple('testapple');
apple.color = 'blue';
console.log(apple.getInfo());

Ответы [ 2 ]

7 голосов
/ 23 ноября 2011

Ваш код работает нормально, но недостаточно эффективно, поскольку он дает каждому экземпляру функцию getInfo. Этого можно избежать. Вы можете использовать следующие шаблоны для имитации классов в JS.

Базовая модель

Чтобы смоделировать свойство / метод класса , вы устанавливаете свойства / метод в функции конструктора.

function Apple() {};
Apple.classProperty = some_value;
Apple.classMethod = some_method;

Чтобы смоделировать свойство экземпляра , вы устанавливаете внутри функций конструктора (как вы это делали в своем коде):

function Apple() {
  this.property = some_instance_value;
};

Чтобы смоделировать метод экземпляра , вы настраиваете функции в Constructor.prototype, которые будут общими для всех его экземпляров

function Apple() {};
Apple.prototype.instanceMethod = function () {...};

Расширенный шаблон

Если вы хотите установить приватный / привилегированный метод, Крокфорд предлагает очень полезные шаблоны.

Частный метод - доступен только для конструктора:

function Constructor(...) {
var that = this;
var membername = value;
function membername(...) {...}

}

Привилегированный метод - может получить доступ к частному методу и доступен для общественности:

function Constructor(...) {
this.membername = function (...) {...};
}
0 голосов
/ 23 ноября 2011

Ничего плохого в этой реализации.

В JavaScript так много шаблонов.Пожалуйста, посмотрите.

http://addyosmani.com/resources/essentialjsdesignpatterns/book/

Я также нашел этот сайт очень полезным

http://bonsaiden.github.com/JavaScript-Garden/

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