私はいくつかのjQueryjavascriptコードを書いていて、それを見つけたときにGoogle Chrome(Mac OS X 10.7 Lionの最新の安定した24)の問題をデバッグしていました
MyWidget = Widget.extend({
_item_id : undefined,
container : undefined,
initialize : function(config) {
var self = this;
self.container = $(config.container_id);
self._item_id = config.item_id;
if (typeof(config.changeElement) !== 'undefined') {
self._changeElement = config.changeElement;
$(self._changeElement).unbind('change', OtherWidget.has_setting_changed);
$(self._changeElement).change(function (event) {
self.changeSetting($(event.target).val()); // had 'this' here before
});
self._load();
}
},
_load : function() {
var self = this; // <-- here is what fails
self.changeState('Loading');
if (typeof(self._item_id) === 'undefined' || this._item_id === '') {
self.changeState('Create');
} else {
self._loadItem();
}
},
changeSetting : function(item_id) {
this._item_id = item_id;
this._load();
this._reloadOtherWidget();
},
...
});
デバッガーに表示された:「自己:未定義」。それが何か違いを生むのであれば、割り当てはメンバー関数内にありました。単純なコードだったので、「this」を直接使用することになりました。ある種の組み込みのウィンドウへの参照を覆い隠している(「シャドウイング」している)ことは知っていますが、それでうまくいくと思いました...既知の問題に対処していますか?
私はそれがうまくいくことを示しているように思われるこの関連する投稿を見ました: それ、自己または私-JavaScriptでどちらを好むか?