Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
и отказывается от использования прототипов(создает методы для каждого экземпляра объекта заново)
function(){
Animal.prototype.hello.apply(self, arguments)
}
bind(...)? Тем не менее вы создаете новую анонимную функцию для каждого инстанса.WeakMaps (пример). Только там нет возможной путаницы с this и self.function Lib() {
this._private = 1;
}
Lib.prototype.getPrivate = function() {
return this._private;
}
function MyClass() {
this._private = 2;
}
MyClass.prototype = new Lib();
var myClass = new MyClass();
console.log("_private = " + myClass._private); // 2
console.log("getPrivate = " + myClass.getPrivate()); // 2
function Lib() {
var self = this; // свойство доступно только из конструктора
this._private = 1; // свойство доступно и из конструктора и из методов, добавленных через prototype
return {
getPrivate: function() {
return self.privateMethod();
},
// или
getPrivateAlt: Lib.prototype.privateMethod.bind(this)
}
}
Lib.prototype.privateMethod = function() {
return this._private;
}
function MyClass() {
this._private = 2;
}
MyClass.prototype = new Lib();
var myClass = new MyClass();
console.log("_private = " + myClass._private); // 2
console.log("getPrivate = " + myClass.getPrivate()); // 1
console.log("getPrivateAlt = " + myClass.getPrivateAlt()); // 1
Честные приватные свойства в прототипе