ES5 я могу определить переменную в родительской для функции области видимости и она будет видима в функции, так я могу сделать замыкание, в частности передать контекст.
Как подобное сделать в случае применения ES6 class ?
И более специфичный вопрос: как передать контекст объекта в функцию-метод этого объекта, когда она вызывается в callback и не имеет контекста или отличный от контекста объекта (window часто), в случае применения ES6 class ?
Покажи пример кода который делает то что тебе надо в es5.
Пример навешивания обработчика-метода класса с сохранением контекста.
С помощью bind и arrow function. Сам я предпочитаю arrow function (проще отлаживать).
class MyClass {
constructor() {
// Via bind
document.addEventListener('click', this.handler.bind(this))
// Via arrow function
document.addEventListener('click', () => {
this.handler()
})
}
handler() {
console.log(this)
}
}
var self = null;
function Some() {
this.sv = 'sv';
self = this;
}
Some.prototype.sm = function() {
self.sv = 'ov';
}
Например как-то так для случая если я хочу сохранить контекст вызова из callback.
Наверно можно просто сделать тоже, но с class?
let self = null;
class Some {
constructor () {
this.sv = 'sv';
self = this;
}
sm() {
self.sv = 'ov';
}
}
Да bind это то что поможет, но есть еще Angular, который на bind ругается, поэтому я обошел:
я вызвал не ng-click=“somePromise.then(someObject.SomeMethod)”
а ng-click=“someObject.wrapMethod”
а уже в wrapMethod() {
somePromise.then((data)=>{
this.data = data;
})
}
через стрелочную функцию сохранил контекст, но мне этот вариант не очень нравится, в частности тем что если у меня в стрелочной функции будет повторяющийся функционал как его вынести в функцию, вызвав внутри еще одну функцию?
Ну и похоже на костыль. А когда чувство прекрасного страдает, то значит что-то не так.