Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Публичные методы класса (https://javascript.ru/forum/misc/39929-publichnye-metody-klassa.html)

_axl 17.07.2013 14:02

Публичные методы класса
 
Прочитал несколько статей по организации js кода в модули, советуют публичные методы оформлять так:
var revealingModulePattern = function(){
  var privateVar = 1;
  function privateFunction(){
    alert('private');
  };
  var publicVar = 2;
  function publicFunction(){
    anotherPublicFunction();    
  };
  function anotherPublicFunction(){
    privateFunction();
  };
  // reveal all things private by assigning public pointers
  return {
    init:publicFunction,
    count:publicVar,
    increase:anotherPublicFunction
  }
}();

или через prototype.
Я раньше использовал просто объявление с this. т.е.
this.method1 = function(){}
и т.п. В чем минус этого подхода?

devote 17.07.2013 14:15

Цитата:

Сообщение от _axl
В чем минус этого подхода?

var Ololo = function() {
    function hehe() {
    }
    return {
        ooops: hehe
    }
}
var instance = new Ololo;
alert(instance instanceof Ololo); // false

// --------------------------------------

var Ololo2 = function() {
    this.ooops = function () {
    }
}
var instance = new Ololo2;
alert(instance instanceof Ololo2); // true

// --------------------------------------

var Ololo3 = function() {
}
Ololo3.prototype.ooops = function () {}
var instance = new Ololo3;
alert(instance instanceof Ololo3); // true

_axl 17.07.2013 16:28

Не смог придумать, что в практическом плане дают такие особенности. Понятно, что можно сделать класс свойством которого может быть только экземпляр Ololo2 или 3 и для этого делать проверку, как в примере, а что еще?
ВОпрос вызван тем, что по-моему вариант с this проще или по крайней мере читабельнее. Но по какой-то причине же прибегают в такому усложнению, зачем?

devote 17.07.2013 16:31

Цитата:

Сообщение от _axl
Ololo2 или 3 и для этого делать проверку, как в примере, а что еще?

очень жаль что ты понимаешь это лишь так, хотя тут совершенно дело не в проверке. А в иерархии объектов
Цитата:

Сообщение от _axl
Но по какой-то причине же прибегают в такому усложнению, зачем?

JavaScript довольно гибкий язык, и в нем можно творить что угодно и как угодно. А стильно того кто как пишет не важен, главное что бы в конечном итоге был удовлетворительный результат.

danik.js 17.07.2013 17:32

var C = (function(){
    function privateMethod() {};
    var C = function(){};
    C.prototype.publicMethod = function() {};
    return C;
})();

var instance = new C();
alert(instance instanceof C);


Часовой пояс GMT +3, время: 23:02.