【问题标题】:issues with 'this' when using within jquery code block在 jquery 代码块中使用时出现“this”的问题
【发布时间】:2011-04-26 14:24:25
【问题描述】:

我想在 jquery 代码块中使用调用对象的值,但是 'this' 映射到 jquery 对象而不是调用者!请问如何解决这个问题?

// class
myClass = function (){
    // member object
    this._localVars = {
        _elementClass:'.elem-class',
        _dots:null,
        _dotStatus:null
    };

    // member function
    this.func1 = function() {
        $(this._elementClass).each(function(_index, _element){
            // this._localVars._dots[_index] = _element; ... this line throws an error 'this._localVars' is undefined ... as 'this' is html element here and not an object of the calling class
        });
    };
};

请建议我如何在 jquery 代码块中使用“this”来引用类的变量/对象而不是 HTML/jQuery。

谢谢

【问题讨论】:

    标签: javascript jquery oop dom


    【解决方案1】:

    尝试将this 对象保存到局部变量中

        var myObject = this;
        $(this._elementClass).each(function(_index, _element){
            myObject._localVars._dots[_index] = _element;
        });
    

    【讨论】:

    • 我会试一试,但是如果我使用 'var myObject = this;'它不会创建对象的本地副本,然后无论我做什么操作,都会影响该本地副本而不是全局集合?
    • @Mandeep 不,它只会创建对旧对象的引用。这不是 C。
    【解决方案2】:

    您可以使用the jQuery.proxy method 来设置您想要的this 的值。

    您将函数作为第一个参数传递,当前的this 作为第二个参数。

    myClass = function (){
        this._localVars = {
            _elementClass:'.elem-class',
            _dots:[],
            _dotStatus:null
        };
        this.func1 = function() {
            $(this._localVars._elementClass).each( $.proxy(function(_index, _element) {
                 this._localVars._dots[_index] = _element;
            }, this));
        };
    };
    
    var cl = new myClass();
    
    cl.func1();
    
    console.log(cl._localVars._dots);
    

    【讨论】:

    • 非常感谢兄弟...这正是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2013-01-03
    相关资源
    最近更新 更多