2011-08-29 83 views
15

我不是最好的jquery,我遇到了var初始化,我不知道为什么编写代码的人这样做了。

在init一个插件,我们有

this.init = function(settings) { 
    var $this = this; 
    this.s = { 
     initialSlide: 0, 
     firstSlide: true, 
    }; 
    ... more code, some uses $this, some uses "this" 
} 

那么究竟是什么的区别就在这里与“$ this”和“这个”,为什么不使用一个或其他所有的时间?

+0

是的,它是一个jquery idiom –

+0

@Matt:代码中没有jQuery。将“this”赋值给另一个变量在“普通JavaScript”中也很常见。 –

+0

@Felix:它是一个插件,这意味着这是指一个jQuery对象。有(或曾经是)用jquery对象加$前缀的jquery方法。因此,它是一个jQuery的问题。如果它不是$ jquery,那么你可能会看到,那个,自己或者更具描述性的关于这个实际上是什么的意思 –

回答

31

通常,这意味着this的副本。关于this的事情是它在每个函数中都会改变。但是,通过这种方式存储,$this不会发生变化,而this确实发生了变化。

jQuery严重使用魔术this值。

考虑以下代码,那里像你一样的您可能需要的东西:

$.fn.doSomethingWithElements = function() { 
    var $this = this; 

    this.each(function() { 
     // `this` refers to each element and differs each time this function 
     // is called 
     // 
     // `$this` refers to old `this`, i.e. the set of elements, and will be 
     // the same each time this function is called 
    }); 
}; 
+0

你怎么写$ this? jQuerythis? – Hitesh

+1

var $这和其他任何变量名称一样,$这只是让读取代码的其他人知道变量在页面下方做了些什么的一种方法。简而言之,是的,你可以编写'var jQuerythis',但这没有任何区别。您也可以在旧jQuery中使用$,正如上面所述$ this不依赖于jQuery,它只是一种创建'this'副本的方法。 –

5

在这种情况下,什么都没有。 $this只是另一个变量声明,其中this已分配给它。

通常情况下,我看到这个快捷方式在使用JavaScript库时被人们用来包装this。例如,jQuery中的典型用法是:

// rather than writing $(this) everywhere 
var $this = $(this); 

$this.each(function(){ 
    // Do Something 
}); 
0

这意味着什么在这种情况下(没有双关语意)。如果陈述是var $this = $(this),那会更合理,因为那样会允许使用所有漂亮的jQuery功能。

+0

不正确,将其重新分配给不同的变量允许内部闭包引用外部范围。 – Evert

0

其他人都说,jquery代码中还有一个习惯用法,在jquery对象前加上$。不知道它是多么受欢迎,但曾经看到很多。

0

我这样做$ this = $(this),因为它似乎会在每次想要使用它时保存该调用的实际处理。

此外,对于'魔术'这个''功能,别人提到。保留原始副本很方便。

0

实际上,jQuery是JavaScript DOM的一个包装,它既增强和简化了它。 非常简单jQuery选择返回jQuery对象/秒即

var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects 

然而,与Java语言中选择元素,则返回HTML DOM元素,即

var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects 

的问题出现在DOM对象不提供相同的功能, JQuery对象提供。

下面是一个事件例子示出的区别:

$('.changeColorHover').hover(function() { 
    this.attr("style", "color:red"); 
}); //Will not work as we are trying to call a JQuery method on a DOM object 

考虑到提到的上方的“这个”关键字是一个DOM对象,因此你需要将其转换为一个jQuery对象,以便利用jQuery方法。

$('.changeColorHover').hover(function() { 
     $(this).attr("style", "color:red"); 
}); //Will work since we have first converted the DOM object to a JQuery object 

总结一下,this关键字允许你访问调用事件的对象,因为这会引发引发事件的对象。但是,这是一个DOM对象,而不是一个jQuery对象。因此,除非将其转换为jQuery对象,否则您想使用的任何jQuery方法都不可用。

相关问题