Я хотел бы начать, что я не чувствую себя комфортно с JS.javascript личные участники прототипа
У меня возникла проблема с использованием частных методов в прототипе. Допустим, у нас есть класс Person. Я хочу разоблачить метод greet, но сохранить getName private.
function Person(name) {
this.name = name;
}
Person.prototype = (function() {
function getName() {
return this.name;
}
function greet() {
console.log("hello " + getName());
}
return {
greet: greet
}
})();
p = new Person('Szymon');
p.greet();
выше код не будет работать, как GetName не имеет контекст («это» указывает на окно, где имя не существует).
Мое решение этой проблемы было:
function greet() {
console.log("hello " + getName.call(this));
}
однако это получить немного грязный с большим классом.
Это чистый раствор? Я был бы признателен за любые отзывы.
Я думаю, лучшее решение - не беспокоиться о частных и публичных, просто префикс внутренних методов с подчеркиванием. – elclanrs
@Teemu: Это соглашение широко принято и на самом деле не обладает компетенцией. Конечно, вам потребуется определенная компетенция, чтобы решить, когда применение этого соглашения возможно. – Bergi
@kit: Обратите внимание, что терминология «частные члены в прототипе» может быть запутанной. 'getName' is * not * член (свойство), это просто локальная переменная. – Bergi