【问题标题】:experimenting a loss of scope尝试失去范围
【发布时间】:2015-11-23 15:28:07
【问题描述】:

我正在做我自己的 jQuery 插件来显示搜索屏幕。我正在测试代码,但我的代码有问题...

我在我的代码中执行了一系列链接事件,并且在代码中的某个确定点,我失去了被调用的原始范围(分析得很好,结果是预期的,但不是我想要的)

我可以做些什么来保留this对象的原始范围

_load_zona: function(e){
            var ev;
            ev = {
                names:{
                    key:    'id_zona',    
                    value:  'zona',       
                },
                elements:{
                    form:       this.o.form_name,
                    select:     'zona' 
                },
                data:{
                    id_gerencia: $(this.o.form_name + ' select[name="gerencia"]').val(),
                    id_zona: this.o.seleccion.id_zona
                },
                events:{
                    success: this._load_depto
                },
                url: this.o.url.zona,
                defaultText: 'Seleccione una zona ...'
            };
            if(this.o.csrf !== undefined){
                ev.names["csrf"] = this.o.csrf.key;
                ev.data[this.o.csrf.key] = this.o.csrf.value;
            }
            this._commonFillSelect(ev);
        },
        _load_gerencia: function(e){
            var ev;
            ev = {
                names:{
                    key:    'id_gerencia',  
                    value:  'gerencia',     
                },
                elements:{
                    form:   this.o.form_name,
                    select: 'gerencia' 
                },
                data:{
                    id_gerencia: this.o.seleccion.id_gerencia
                },
                events:{
                    success: this._load_zona
                },
                url: this.o.url.gerencia,
                defaultText: 'Seleccione una gerencia ...'
            };
            if(this.o.csrf !== undefined){
                ev.names["csrf"] = this.o.csrf.key;
                ev.data[this.o.csrf.key] = this.o.csrf.value;
            }
            this._commonFillSelect(ev);
        },

this._commonFillSelect(ev) 它的一个函数使通过 AJAX 填充选择选项的过程,在必要时更新组件,当一切正常时,从成功中获取值并执行它。

此代码位于外部 JavaScript 文件中

总之就是这样

_load_Gerencia() --------> _commonFillSelect() ----> _load_zona();

当执行_load_zona(); 时,this 对象已经改变了它们的范围,它是我在_load_gerencia() 中引用的原始 this 对象。

【问题讨论】:

  • @michael 感谢所有的更正。注意....

标签: javascript jquery scope


【解决方案1】:

在调用 _load_zona() 之前,您可以定义另一个变量,通常是“that”作为当前作用域的“this”。

这种方法在 JS 中很常用,也被广泛讨论。在此处查看更多信息:Is var self = this; a bad pattern?

【讨论】:

  • 我猜,每个函数(_load_gerencia,_load_zona ...)开头的var that = this 应该没问题,每个引用用that 替换this
猜你喜欢
  • 2014-05-08
  • 2014-08-07
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多