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插件 ,它可以满足同样的需求。