Javascript 将此对象存储在自定义私有变量中
我有这个js对象Javascript 将此对象存储在自定义私有变量中,javascript,jquery,this,global,Javascript,Jquery,This,Global,我有这个js对象 var toggleItem = { attrData : '', toggleNew : '', toggleOld : '', //var self : this, init : function(){ self = this; self.listener(); }, listener : function(){ jQuery('.btn-save').click(function(){ var cu
var toggleItem = {
attrData : '',
toggleNew : '',
toggleOld : '',
//var self : this,
init : function(){
self = this;
self.listener();
},
listener : function(){
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
},
updateForm : function(){
jQuery('#toggle-product-form #new').val(self.toggleNew);
jQuery('#toggle-product-form #old').val(self.toggleOld);
jQuery('#toggle-product-form').submit();
},
}
在过去,我经常遇到这个值被更改为我使用jQuery
引用的任何元素的问题。在这种情况下,我想将这个
存储在一个名为self
的新变量中。但重要的是,self
不能在全球范围内可用
您将看到我在对象顶部编写的//var self:this,
现在被注释掉了。这是因为将var
放在它前面会在控制台中呈现此错误-意外标识符。但是,如果我删除var
部分,我就会遇到与现在相同的问题,将它放在init
函数中(它是全局的)
问题我希望对象内部的所有内容都可以使用,外部的任何内容都不能使用
无论什么解决方案有效,我也计划将其应用于顶部声明的其他三个变量
NB我知道我可以使用对象的名称而不是self,并将此全局对象与其他对象冲突的风险相对较小,但我确信必须有一种方法来重新分配此
的值,同时保持其仅可访问(以其当前形式)在toggleItem
对象中。您只需要在侦听器
函数中使用自引用。尝试这样做:
var toggleItem = {
// all your other stuff...
listener: function() {
var self = this;
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
编辑:或者,您可以将所有对self
的引用更改为toggleItem
,因为这正是您试图访问的内容。如果您想声明一次self
,而不将其放在全局范围内,那么您可以使用模块模式的一个重要部分
var toggleItem = (function() {
var self = {
// other stuff...
listener: function() {
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
return self;
})();
这会创建一个封闭的作用域,因此self
不会泄漏,并且它会立即调用函数,因此toggleItem
被分配函数的返回值。您只需要在侦听器中使用self引用。尝试这样做:
var toggleItem = {
// all your other stuff...
listener: function() {
var self = this;
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
编辑:或者,您可以将所有对self
的引用更改为toggleItem
,因为这正是您试图访问的内容。如果您想声明一次self
,而不将其放在全局范围内,那么您可以使用模块模式的一个重要部分
var toggleItem = (function() {
var self = {
// other stuff...
listener: function() {
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
return self;
})();
这会创建一个封闭的作用域,因此self
不会泄漏,并且它会立即调用函数,因此toggleItem
被分配函数的返回值。您只需要在侦听器中使用self引用。尝试这样做:
var toggleItem = {
// all your other stuff...
listener: function() {
var self = this;
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
编辑:或者,您可以将所有对self
的引用更改为toggleItem
,因为这正是您试图访问的内容。如果您想声明一次self
,而不将其放在全局范围内,那么您可以使用模块模式的一个重要部分
var toggleItem = (function() {
var self = {
// other stuff...
listener: function() {
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
return self;
})();
这会创建一个封闭的作用域,因此self
不会泄漏,并且它会立即调用函数,因此toggleItem
被分配函数的返回值。您只需要在侦听器中使用self引用。尝试这样做:
var toggleItem = {
// all your other stuff...
listener: function() {
var self = this;
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
编辑:或者,您可以将所有对self
的引用更改为toggleItem
,因为这正是您试图访问的内容。如果您想声明一次self
,而不将其放在全局范围内,那么您可以使用模块模式的一个重要部分
var toggleItem = (function() {
var self = {
// other stuff...
listener: function() {
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
};
return self;
})();
这会创建一个封闭的作用域,因此self
不会泄漏,它会立即调用函数,因此toggleItem
被分配函数的返回值。将来,要使成员变量私有,可以使用。这将防止变量泄漏到全局范围
function toggleItem() {
var self = this,
attrData = '',
toggleNew = '',
toggleOld = '';
function init(){
self.listener();
}
function listener(){
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
function updateForm(){
jQuery('#toggle-product-form #new').val(self.toggleNew);
jQuery('#toggle-product-form #old').val(self.toggleOld);
jQuery('#toggle-product-form').submit();
}
return init;
}
var toggle = toggleItem();
toggle.init();
将来,要使成员变量私有,可以使用。这将防止变量泄漏到全局范围
function toggleItem() {
var self = this,
attrData = '',
toggleNew = '',
toggleOld = '';
function init(){
self.listener();
}
function listener(){
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
function updateForm(){
jQuery('#toggle-product-form #new').val(self.toggleNew);
jQuery('#toggle-product-form #old').val(self.toggleOld);
jQuery('#toggle-product-form').submit();
}
return init;
}
var toggle = toggleItem();
toggle.init();
将来,要使成员变量私有,可以使用。这将防止变量泄漏到全局范围
function toggleItem() {
var self = this,
attrData = '',
toggleNew = '',
toggleOld = '';
function init(){
self.listener();
}
function listener(){
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
function updateForm(){
jQuery('#toggle-product-form #new').val(self.toggleNew);
jQuery('#toggle-product-form #old').val(self.toggleOld);
jQuery('#toggle-product-form').submit();
}
return init;
}
var toggle = toggleItem();
toggle.init();
将来,要使成员变量私有,可以使用。这将防止变量泄漏到全局范围
function toggleItem() {
var self = this,
attrData = '',
toggleNew = '',
toggleOld = '';
function init(){
self.listener();
}
function listener(){
jQuery('.btn-save').click(function(){
var current = this.id.split('_').pop();
self.toggleNew = jQuery('.toggle-data-new_'+current).val();
self.toggleOld = jQuery('.toggle-data-old_'+current).val();
self.updateForm();
});
}
function updateForm(){
jQuery('#toggle-product-form #new').val(self.toggleNew);
jQuery('#toggle-product-form #old').val(self.toggleOld);
jQuery('#toggle-product-form').submit();
}
return init;
}
var toggle = toggleItem();
toggle.init();
我会按照Mike的建议去做,但是会按照完整的模块模式去做。这将允许您在需要收集任何公共功能的情况下拥有“私有”功能
在这个解决方案中,我认为不需要使用self
变量,除非您有其他未共享的内容。这里提供的封装将所有内容都集中在一个函数中,而您的对象上没有所有其他函数可见(这是将所有内容都放入全局范围的一个进步,但您可以采取进一步的措施)
我会按照Mike的建议去做,但是会按照完整的模块模式去做。这将允许您在需要收集任何公共功能的情况下拥有“私有”功能
在这个解决方案中,我认为不需要使用self
变量,除非您有其他未共享的内容。这里提供的封装将所有内容都集中在一个函数中,而您的对象上没有所有其他函数可见(这是将所有内容都放入全局范围的一个进步,但您可以采取进一步的措施)
我会按照Mike的建议去做,但是会按照完整的模块模式去做。这将允许您在需要收集任何公共功能的情况下拥有“私有”功能
在这个解决方案中,我认为不需要使用self
变量,除非您有其他未共享的内容。这里提供的封装将所有内容都集中在一起