为什么要将“this”分配给jQuery中的变量?

问题描述:

经常在一些jQuery代码我看到this被分配给jQuery中的变量,我不明白这种方法的原因?为什么要将“this”分配给jQuery中的变量?

这是一个jQuery插件构造函数的例子:

//constructor 
    function Nullpoll(element, options){ 
     var widget = this; 
     widget.config = $.extend({}, defaults, options); 
     widget.element = element; 

     widget.element.on("click", function() { 
      alert("Test") 
      }); 

     widget.element.one("change", function(e){ 
      widget.element.find("button").removeProp("disabled"); 
     }); 

     this.init(); 
     } 
+1

因为,在这种情况下,里面的听众'this'不是'widget'但'widget.element'。在上面声明它更易读 – 2014-10-28 10:08:06

this的值由其调用函数的方式决定。

你把它分配给不同的变量之一:

  1. 给它更多的信息名
  2. (更常见),从而使不同的功能可用其可以访问第一功能的范围

在这种特殊情况下,匿名功能pa ssed到widget.element.one()使用Nullpoll的呼叫中的值this。如果试图使用this关键字,它会得到不同的值(这是什么值将取决于one功能怎么叫匿名函数)

this点到页面上的元素,一个特定方法被调用了!

http://learn.jquery.com/javascript-101/this-keyword/

http://learn.jquery.com/javascript-101/this-keyword/

在JavaScript中,因为在大多数的面向对象的编程语言,this是在方法中用于指在其上调用的方法的对象的特殊关键字。

  • 如果函数是使用Function.call()Function.apply()this将被设置为传递给.call()/.apply()第一个参数调用:使用简单一系列步骤来确定这个值。如果传递给.call()/.apply()的第一个参数是nullundefined,this将引用全局对象(这是Web浏览器中的window对象)。
  • 如果正在调用的函数是使用Function.bind()创建的,则this将是在创建函数时传递给.bind()的第一个参数。
  • 如果函数被调用为对象的方法,则this将引用该对象。
  • 否则,该函数将作为一个独立函数被调用,而不会附加到任何对象,并且this将引用全局对象。
+1

这个答案描述了'this',但没有回答OP关于为什么'this'被分配给代码中的变量的问题。 – jfriend00 2014-10-28 10:22:38

当使用内联回调的范围内(如在事件处理程序你的例子),回调中this的值通常与父范围不一样。因此,如果您想在这些回调中访问父范围中的this的值,那么将其保存到父范围中的局部变量是一种常见的设计模式。然后,在回调中,即使this在回调中可能具有不同的值,仍然可以从父范围引用该值。

作为第二个好处,一些极小可以通过使用一个局部变量,而不是this因为局部变量可以被最小化被重新命名为单个字符变量做更小的代码,但this不能被重新命名。

类似的问题了一堆答案在这里:What is the value of var me = this;