为什么应该"这个“;被分配给jQuery中的变量

Why should "this" be assigned to variable in jQuery?

本文关键字:分配 jQuery 变量 quot 这个 为什么      更新时间:2023-09-26

在一些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();
        }

this的值由它在函数中的调用方式决定。

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

  1. 给它一个更具信息性的名称
  2. (更常见的),以便不同的函数中可用,该函数可以访问第一个函数的范围

在这种特殊情况下,传递给widget.element.one()的匿名函数使用对Nullpoll的调用中的this的值。如果它尝试使用this关键字,它将获得一个不同的值(该值是什么取决于one函数如何调用匿名函数)

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将引用全局对象

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

第二个好处是,一些最小化器可以通过使用局部变量而不是this来生成较小的代码,因为最小化器可以将局部变量重命名为单个字符变量,但不能重命名this

类似的问题,这里有很多答案:var me=this的值是多少;

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

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