JavaScript: я должен скрывать свои реализации?

Как программист C#, у меня есть что-то вроде привычки к созданию вещей, частных, который может и должен быть частным, и я всегда получаю странное чувство, когда тип JS выставляет все свои половые органы мне (и что чувство не 'пробуждено'). Скажите, что у меня есть тип, который имеет a draw метод, который внутренне звонит drawBackground и drawForeground, которые не имеют никакого смысла быть названным самостоятельно. Как я должен реализовать это?

Опция 1

Foo = function(){
  this.draw();  
};

Foo.prototype.draw = function(){
  this.drawBackground();
  this.drawForeground();
};

Foo.prototype.drawBackground = function(){};
Foo.prototype.drawForeground = function(){};

Опция 2

Foo = (function(){

  var constructor = function(){
    this.draw();
  };

  var drawBackground = function(){};
  var drawForeground = function(){};

  constructor.prototype.draw = function(){
    drawBackground.call(this);
    drawForeground.call(this);
  };

  return constructor;

})();

Различие, конечно, будучи этим в первом примере, drawBackground и drawForeground методы являются частью общедоступного API, в то время как они скрыты к внешней стороне во второй. Это желательно? Какой я должен предпочесть? Разве я неправ применить свои привычки C# к JavaScript, и я должен сделать все расширяемым и сверхъездовым в JavaScript? И каковы последствия производительности .call(this)?

5
задан JulianR 10 July 2010 в 21:17
поделиться

1 ответ

Среди разработчиков Perl есть хорошо известная цитата из (не) известной книги Camel: «Модуль Perl предпочел бы, чтобы вы не выходили из его гостиной, потому что вас не пригласили, не потому, что у него есть дробовик ». Философия заключается в том, что если вы, как разработчик библиотеки, хотите различать публичный и частный API, это прекрасно. Сделайте это и задокументируйте. Вызывающий ваш код должен знать, что есть что, но он также может вести себя как идиот, если он решит и вызовет вещи, которые, по вашему мнению, им не следует называть.С точки зрения объектно-ориентированного программирования это еретично, но с языками сценариев они катятся именно так.

Ответ на этот вопрос несколько субъективен, но я скажу вам, что когда я пишу JavaScript и имею методы или переменные, которые были бы частными, если бы я кодировал в .NET, я просто добавляю к ним что-то вроде " prv_ "или" p_ "или просто" _ "... все, что плывет по вашей лодке. Таким образом, вы сказали своим пользователям, что эти данные должны быть конфиденциальными и могут измениться из-под них. И таким образом, если они все равно решат вызывать ваши частные методы, этот сомнительный код будет торчать, как больной палец.

7
ответ дан 14 December 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: