javascript - 尝试失去范围

标签 javascript jquery scope

我正在做我自己的 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 对象>.

最佳答案

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

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

关于javascript - 尝试失去范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874672/

相关文章:

objective-c - 为什么可以在循环中声明重复的 Objective-C 对象,但不能按顺序声明?

javascript - 从不同地方取消setInterval(NodeJS变量范围)

javascript - 如何在带有 Chrome 调试的 VS Code 中启用文件的可编辑调试?

javascript - Angular 显示问题......不正确

javascript - jquery点击事件重置复选框的检查属性

java - 在 Spring Boot 中使用 SimpleThreadScope 我在同一线程中获得一个对象的两个实例

javascript - 无法在单独的js文件中调用jquery自定义函数

javascript - 跨浏览器 HTML 布局的正确方法是什么?

jquery - WordPress 网站上的响应图像

javascript - 类型错误 .then() 不是 webpack 2 中的函数