Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将此对象存储在自定义私有变量中_Javascript_Jquery_This_Global - Fatal编程技术网

Javascript 将此对象存储在自定义私有变量中

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

我有这个js对象

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
变量,除非您有其他未共享的内容。这里提供的封装将所有内容都集中在一起