ООП: проблема переопределения this
Пример:
var Window = function() { this.title = 'None'; this.update = function(data) { this.title = data.title; } this.move = function() { $.getJSON('/move/', this.update); } this.fix_move = function() { var mthis = this; $.getJSON('/move/', function(data) { mthis.update(data); }); } } Когда вызывается move, то в методе update, подменяется this и уже недоступны поля объекта Window. В fix_move это исправлено. Может быть я что-то делаю не так, как будет правильно использовать ООП в таких случаях? |
fix_move нормально.
|
А если что-то подобное, как в питоне:
var Window = function(self) { self.title = 'None'; self.update = function(self, data) { self.title = data.title; } self.move = function(self) { $.getJSON('/move/', self.update); } } |
Не знаю, как там в Пайтоне, но в JS из этого ничего хорошего не выйдет. Лучше так:
var Window = function() { var self = this; self.title = 'None'; self.update = function(data) { self.title = data.title; } self.move = function() { $.getJSON('/move/', self.update); } }self - обычный идентификатор и никакого специального поведения (кроме, пожалуй, window.self) не несет. |
Интересное решение, спасибо :)
|
Часовой пояс GMT +3, время: 08:47. |