Проблема с приватными методами.
Для реализации приватных методов в 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); |
Цитата:
|
Часовой пояс GMT +3, время: 08:31. |