Как правильно получить доступ к внешнему объекту из внутреннего в JavaScript? Есть следующий код:function mock() { this.val = 'val'; this.log = { start: function() { this.timer = setInterval(function() { console.log(this.val); }.bind(this), 1000); }.bind(this), stop: function() { clearInterval(this.timer); delete this.timer; }.bind(this) }; } Впоследствии в строке console.log(this.val); предполагается доступ к внешнему объекту (то есть к mock). Сейчас я использовал bind(this) чтобы передать контекст во вложенные функции. Как правильно было бы написать подобное в парадигме JS так, чтобы в строке вида console.log(this.val) я мог получить нормальный доступ к внешнему (mock) объекту, и при этом чтобы интервал прикреплялся именно к вложенному объекту log(и был доступен через this в log'е) а не к mock? Насколько я понял тут либо надо передавать что-то через аргумент в start() либо каким-то образом сделать замыкание (но что именно замкнуть???). Но я все равно не понимаю, как бы это сделал человек который программирует на JS уже не один год и который умеет на этом языке думать) подскажите плз, javascript-ниндзи ЗЫ.: Сам только перелез с пыхи на JS под Ноду. Не знаю насколько код выше выглядит адекватным, не судите строго
В данном случае можно воспользоваться замыканием для сохранения доступа к внешнему объекту mock во вложенной функции. Вместо использования bind(this) можно сохранить ссылку на внешний объект перед использованием setInterval.
В данном примере переменная self сохраняет доступ к внешнему объекту mock во вложенной функции. Теперь в строке console.log(self.val) будет выводиться значение свойства val объекта mock.
Надеюсь, это поможет вам разобраться с проблемой доступа к внешнему объекту из внутреннего в JavaScript. Если у вас есть еще вопросы, не стесняйтесь задавать.
В данном случае можно воспользоваться замыканием для сохранения доступа к внешнему объекту mock во вложенной функции. Вместо использования bind(this) можно сохранить ссылку на внешний объект перед использованием setInterval.
Пример кода с использованием замыкания:
function mock() {var self = this;
this.val = 'val';
this.log = {
start: function() {
this.timer = setInterval(function() {
console.log(self.val);
}, 1000);
},
stop: function() {
clearInterval(this.timer);
delete this.timer;
}
};
}
В данном примере переменная self сохраняет доступ к внешнему объекту mock во вложенной функции. Теперь в строке console.log(self.val) будет выводиться значение свойства val объекта mock.
Надеюсь, это поможет вам разобраться с проблемой доступа к внешнему объекту из внутреннего в JavaScript. Если у вас есть еще вопросы, не стесняйтесь задавать.