Каков наилучший способ объявить и получить объект JS? (шаблон) - PullRequest
2 голосов
/ 14 февраля 2012

Вопрос по Javascript.О шаблоне или выражении, может быть дубликат вопроса.

Вы можете получить объект, используя три из них ниже.Результат объекта работает так же.

Какой шаблон является лучшим при использовании тяжелого веб-приложения на javascript?

по порядку,1. объект буквальный регистр2. закрытие дела3. анонимная функция с новым регистром

function car = {
  name: 'Q5',
  type:'SUV',
  wheels:4,
  door:2,
  score: 0,

  getWheel: function(){return this.wheels;},
  getDoor: function(){return this.door;}, 
  setScore: function(score){ this.score = score;}
}




var car = (function(){
  var name = 'Q5',
    type ='SUV',
    wheels = 4,
    door = 2,
    score = 0;

  return {
    getWheel: function(){return wheels},
    getDoor: function(){return door}, 
    setScore: function(_score){ score = _score;}
  }
})();



var car = new function(){
  var name = 'Q5',
    type ='SUV',
    wheels = 4,
    door = 2,
    score = 0;

  this.getWheel = function(){return wheels}
  this.getDoor = function(){return door} 
  this.setScore = function(_score){ score = _score;}    
}

1 Ответ

2 голосов
/ 14 февраля 2012

Не существует «лучшего» пути.В JavaScript есть несколько шаблонов ООП, и тот, который вы упомянули, является одним из них (и также популярным).По сути, это прототипный (или псевдоклассический) шаблон с замыканием для инкапсуляции частных статических переменных на основе классов.

Существуют другие шаблоны (например, функциональный шаблон, рекомендованный Дугласом Крокфордом).

Я лично рекомендую псевдоклассический шаблон (хотя, какой шаблон является лучшим, это горячая дискуссия).

Если вы выполняете ООП с JavaScript, я настоятельно рекомендую вам взглянуть напринятие библиотеки JavaScript со встроенным ООП, такой как Dojo Toolkit или Closure Library .Другие библиотеки (например, jQuery, MOOtools, Ext и т. Д.) Имеют модули ООП и / или плагины.

или

Хотя в JavaScript нет классов, естьконструкторы и прототипы.Эти понятия пригодятся, когда у вас есть несколько похожих объектов (например, пользователи, содержащиеся в списке пользователей).В вашем примере кода используются обе эти концепции.Используя такие имена, как myclass, трудно сказать, что вы пытаетесь смоделировать.Вот пример конструктора User и расширение его прототипа:

var User = function (name) {
    this.name = name;
};

User.prototype.sayHello = function () {
    return "Hello, my name is " + this.name;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...