Проблема с приватными методами.
Для реализации приватных методов в JS я использую такую конструкцию. И все было бы хорошо, но есть одна проблема, функция _getName выполняется раньше чем выполнятся конструктор, отсюда она ничего не знает о свойстве this.name. Как можно поступить в такой ситуации для решения данного вопроса?
Animal = function(name) { this.name = name; }; Animal.prototype = function() { function _getName() { console.log(this.name); } return { getName: function() { console.log(this.name); } }; }(); |
В приведенном примере функция _getName вообще не выполняется, ни раньше ни позже, и не может быть вызвана, т.к. она видна только внутри конструктора, в котором она не вызывается.
|
Функция _getName может быть вызвана например в функции getName - это и есть приватный метод.
|
Как тогда понять это
Цитата:
Т.е. примера-то и нет... :no: |
Цитата:
Animal = function(name) { this.name = name; }; Animal.prototype = function() { function _getName() { console.log(this.name); } return { getName: function() { _getName.call(this); } }; }(); var a = new Animal("Murzik"); a.getName(); |
rgl,
Спасибо, это решает одну проблему, но бывает еще необходимо делать примерно следующее var _name = this.name; в прототипе вне функции. Animal = function(name) { this.name = name; }; Animal.prototype = function() { var _name = this.name; function _getName() { console.log(this.name); } return { getName: function() { console.log(this.name); } }; }(); |
H1ghlander, и на что в твоем примере должен this указывать? Инстанса ведь еще нет на момент выполнения твоей функции, создающей прототип.
|
я это понимаю, поэтому и спрашиваю как можно разрешить данную ситуацию.
|
Там разве что через функцию можно такой доступ сделать
var _name = function(obj){obj.name;} //обращаться так _name(this); |
Цитата:
|
а почему люди не делают приватные вот так?
_kokoko ??? |
megaupload,
Затем, чтобы метод был доступен только внутри объекта. Потому, что так он будет доступен из вне. |
а зачем тебе чтобы он был доступен только из вне обьекта и не виден из вне?
|
megaupload, а ты задай этот вопрос к разработчикам на других языках программирования, где есть ключевое слово private
|
Часовой пояс GMT +3, время: 14:26. |