Я объявил прототип функции A.a
, но хотел бы предоставить некоторый синтаксический сахар другими функциями, например. A.sayHi
и A.sayBye
. Проблема связана с контекстом, потому что я хочу, чтобы он указывал на экземпляр, но не имел к нему доступа, когда я объявляю прототип.Как создать функцию прототипа, которая связывает другую функцию прототипа как синтаксический сахар (и сохранить контекст экземпляра)?
function A() {
this.txt = 'so';
};
A.prototype.a = function (txt) {
alert(txt + ' ' + this.txt);
}
A.prototype.sayHi = A.prototype.a.bind(A, 'hi');
A.prototype.sayBye = A.protoype.a.bind(A.prototype, 'bye');
Когда я new A().sayHi().sayBye();
я получаю уведомление с «приветом неопределенного» и «до свидания неопределенного». Конечно, я могу сделать
A.prototype.sayHi = function() {
this.a('hi');
};
но это некрасиво :)
Есть ли способ, что я храню контекст экземпляра (так что this.txt
равно «так») без написания функции?
Вы не будете в состоянии сделать это.Проблема в том, что ваш код 'bind' запускается до создания любого экземпляра, поэтому вы никогда не сможете передать правильное значение this. – Matt