Используете ли вы этот тип шаблона конструктора?
Неа
Вы находите это понятным?
Да, это очень прямо вперед.
У вас есть лучший?
Я еще не смотрел этот разговор, но скоро к нему вернусь. До тех пор я не вижу опасности использования new
и this
, и вот почему:
Не услышав его замечаний, я могу только предположить, что он предлагает держаться подальше от таких вещей из-за характера this
и того, как он подвержен изменениям в зависимости от контекста, в котором выполняется конкретный метод (напрямую на исходный объект или в качестве обратного вызова и т. д.). Как педагог, он может учить избегать этих ключевых слов из-за демографического в основном неосведомленных и неопытных разработчиков, которые увлекаются JavaScript, не вначале понимая природу языка. Для опытных разработчиков, которые близко знакомы с языком, я не уверен, что необходимо избегать этой функции языка, которая предоставляет ему удивительную гибкость (которая полностью отличается от избегания таких вещей, как with
). Все, что сказал, я буду смотреть это сейчас.
В любом случае, когда я не использую какую-то платформу, которая поддерживает автоматическое наследование (например, dojo.declare
), или когда пишу объект, независимый от каркаса, я в настоящее время использую следующий подход.
Определение:
var SomeObject = function() {
/* Private access */
var privateMember = "I am a private member";
var privateMethod = bindScope(this, function() {
console.log(privateMember, this.publicMember);
});
/* Public access */
this.publicMember = "I am a public member";
this.publicMethod = function() {
console.log(privateMember, this.publicMember);
};
this.privateMethodWrapper = function() {
privateMethod();
}
};
Использование
var o = new SomeObject();
o.privateMethodWrapper();
Где bindScope
- служебная функция, аналогичная dojo.hitch
Додзё или Function.prototype.bind
прототипа *.