2010-10-17 38 views
2

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

// 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。

感谢

回答

0

您可以使用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); 
+0

感谢一个兄弟......这正是我一直在寻找的。谢谢! – Mandeep 2010-10-17 15:06:39

+0

@曼迪普 - 不客气。 :O) – user113716 2010-10-17 15:08:03

2

尝试保存this对象到一个局部变量

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

我会给你一个镜头,但是如果我去'var myObject = this'它不会创建对象的本地副本,然后不管我做什么操作,都会影响该本地副本而不是全局集合? – Mandeep 2010-10-17 14:43:57

+0

@Mandeep不,它只会创建一个对旧对象的引用。这不是C. – 2010-10-17 14:53:25