Проблема с приватными методами.
Для реализации приватных методов в 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, время: 20:49. |