为什么要在jQuery中将“this”赋值给变量?

时间:2014-10-28 10:02:42

标签: javascript jquery jquery-plugins

通常在一些jQuery代码中,我看到{j}中的this已分配给变量,我不明白这种方法的原因?

这是一个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();
        }

4 个答案:

答案 0 :(得分:1)

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

在JavaScript中,与大多数面向对象的编程语言一样,this是一个特殊的关键字,在方法中用于引用调用方法的对象。使用一系列简单步骤确定其值:

  • 如果使用Function.call()Function.apply()调用该函数,则this将设置为传递给.call() / .apply()的第一个参数。如果传递给.call() / .apply()的第一个参数是nullundefinedthis将引用全局对象(window Web浏览器中的对象)。
  • 如果正在调用的函数是使用Function.bind()创建的,this将是在创建函数时传递给.bind()的第一个参数。
  • 如果函数作为对象的方法被调用,this将引用该对象。
  • 否则,该函数将作为未附加到任何对象的独立函数调用,this将引用全局对象。

答案 1 :(得分:1)

this的值取决于它出现的函数的调用方式。

您可以将其分配给另一个变量:

  1. 为其提供更具信息性的名称​​或
  2. (更常见),以便可用于不同的功能,可以访问第一个功能的范围
  3. 在这种特殊情况下,传递给widget.element.one()的匿名函数使用this调用中Nullpoll的值。如果它尝试使用this关键字,它将获得不同的值(该值取决于one函数如何称为匿名函数)

答案 2 :(得分:1)

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

作为次要优势,一些最小化器可以通过使用局部变量而不是this来生成更小的代码,因为局部变量可以通过最小化器重命名为单个字符变量,但this不能重命名。

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

答案 3 :(得分:-1)

this指向页面上正在调用特定方法的元素!

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