Jquery $()。每个方法都隐藏了’this’关键字

我正在创建一个Javascript对象,其中包含一个执行jQuery的函数,如下所示:

 function MyClass { Method1 = function(obj) { // Does something here } Method2 = function() { $(".SomeClass").each(function() { // 1 2 this.Method1(this); }); } } 

THIS指的是哪个对象? jQuery指的是each迭代返回的项。 但是,我希望This[1]引用包含类…

如何从jQuery循环中引用包含类?

我想你可以这样做:

 function MyClass { Method1 = function(obj) { //do something here } Method2 = function () { var containingClass = this; $(".SomeClass").each(function () { containingClass.Method1(this); }); } } } 

来自http://docs.jquery.com/Core/each :

这意味着每次执行传入函数时(对于每个匹配的元素都是一次),’this’关键字指向特定的DOM元素。 请注意,’this’不指向jQuery对象。

就个人而言,我更喜欢使用显式参数。 这样,它更容易阅读:

 $('#rotfl').each(function(index, domObject) { var jQueryObject = $(domObject); // code }); 

回答你的问题:JavaScript具有动态静态范围。 您可以执行以下操作:

 var that = this; $('#rotfl').each(function(index, domObject) { var jQueryObject = $(domObject); that.DoSomething(); // code }); 

您所看到的不是jQuery或其each()方法的问题 – 它是一些人认为是JavaScript中的设计错误 – 嵌套函数应该“inheritance”前一个范围的上下文,所以’这个’在嵌套函数中应该在其父作用域中等于’this’,除非有意在不同的上下文中call()使用apply()call() )。

要解决此问题,您需要在嵌套函数之前将“this”赋给变量,以便您有另一种方法来引用它。

在jQuery 1.3.3中,您将能够手动设置事件处理程序等的上下文。

jQuery Edge:绑定不同的“this”

同时,这里的各种技术(别名“this”,使用call / apply)是常见的做法。 Dojo的Peter Higgins也制作了一个jQuery.hitch插件 ,它可以满足同样的需求。