Javascript Chrome浏览器忽略var self=this;
我正在编写一些jqueryjavascript代码,并在调试googlechrome(macosx10.7lion上最新的stable 24)时发现了一个问题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
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;
})());