var $ this = this的原因是什么?

时间:2011-08-29 18:31:17

标签: javascript jquery variables this

我不是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”和“this”之间有什么区别,为什么不一直使用其中一个呢?

6 个答案:

答案 0 :(得分:33)

通常,这意味着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
    });
};

答案 1 :(得分:6)

在这种情况下,没有。 $this只是另一个已赋予this的变量声明。

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

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

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

答案 2 :(得分:0)

在这种情况下没有任何意义(没有双关语)。如果语句是var $this = $(this)则更合乎逻辑,因为这样可以使用所有漂亮的jQuery功能。

答案 3 :(得分:0)

其他人都说过,jquery代码中还有一个成语,用$来为jquery对象添加前缀。不知道它有多受欢迎,但过去常常看到很多。

答案 4 :(得分:0)

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

此外,对于'魔术'这个'其他人提到的功能'。保留原始副本非常方便。

答案 5 :(得分:0)

实际上,jQuery是JavaScript DOM的包装器,它既增强又简化了它。 非常简单的JQuery选择器返回JQuery Object / s,即

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

但是,使用Javascript选择元素会返回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

考虑到上面提到的'this'关键字是一个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方法都不可用。