首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要将“此”分配给jQuery中的变量?

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

Stack Overflow用户
提问于 2014-10-28 10:02:42
回答 4查看 93关注 0票数 1

在某些jQuery代码中,我经常看到this被分配给jQuery中的变量,而我不理解这种方法的原因?

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

代码语言:javascript
运行
复制
    //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();
        }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-28 10:07:48

this的值取决于它在其中显示的函数是如何调用的。

您可以将它赋值给另一个变量:

  1. 给它一个信息更丰富的名字或
  2. (更常见的情况下),使该值在一个访问第一个函数范围的不同函数中可用。

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

票数 1
EN

Stack Overflow用户

发布于 2014-10-28 10:06:39

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

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

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

Stack Overflow用户

发布于 2014-10-28 10:08:05

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26605468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档