Javascript Chrome浏览器忽略var self=this;

Javascript Chrome浏览器忽略var self=this;,javascript,google-chrome,this,undefined,self,Javascript,Google Chrome,This,Undefined,Self,我正在编写一些jqueryjavascript代码,并在调试googlechrome(macosx10.7lion上最新的stable 24)时发现了一个问题 MyWidget = Widget.extend({ _item_id : undefined, container : undefined, initialize : function(config) { var self = this; s

我正在编写一些jqueryjavascript代码,并在调试googlechrome(macosx10.7lion上最新的stable 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();
        },
...
});
MyWidget=Widget.extend({
_项目标识:未定义,
容器:未定义,
初始化:函数(配置){
var self=这个;
self.container=$(config.container\u id);
self.\u item\u id=config.item\u id;
if(typeof(config.changelement)!=‘未定义’){
self.\u changelement=config.changelement;
$(self.\u changelement).unbind('change',OtherWidget.has\u setting\u changed);
$(self.\u changelement).更改(函数(事件){
self.changeseting($(event.target.val());//以前这里有“this”
});
自加载();
}
},
_加载:函数(){

var self=this;//在您放置

         var self = this;  // <-- here is what fails

我们能看到更多的代码吗?如果可能的话是小提琴?这段代码是在严格模式下吗?您需要显示您的代码。要执行
var self=this;
,您需要在包含将使用
self
的函数的适当变量范围内执行。因为您说过它在“成员函数”中,这让我觉得你希望
self
出现在其他函数中,比如构造函数或原型方法……还有,你是在严格模式下编码吗?如果是这样,这个
的默认值将是
未定义的
。Chrome定义了一个全局
self
,所以我猜这可能是一个严格模式问题。请尝试将变量命名为
,而不是
self
,这样您就不会跟踪。谢谢--我特别想知道“self”是否有效,或者Chrome是否存在已知问题。谢谢!我添加了更多上下文,因为我认为我没有提供足够的信息。您的解决方案很有帮助,但我认为我犯了另一个错误。我正在接受因为这是我认为最接近的答案——范围有一些错误。我最终在大多数代码中使用了“this”。
MyWidget = Widget.extend((function(){
       var self = {
           _item_id : undefined,
          container : undefined
        };
        self.initialize = function(config) {
            self.container = $(config.container_id);
            self._item_id = config.item_id;
            if (typeof(config.changeElement) !== 'undefined') {
                self._changeElement = config.changeElement;

                self._load();
            }
        };
        self._load = function() {
            self.changeState('Loading');
            if (typeof(self._item_id) === 'undefined' || this._item_id === '') {
                self.changeState('Create');
            } else {
                self._loadItem();
            }
        };
       return self;
})());