我不是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”之间有什么区别,为什么不一直使用其中一个呢?
答案 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方法都不可用。