【问题标题】:What is the usage of assigning "this" object to a variable inside a function? [duplicate]将“this”对象分配给函数内的变量有什么用? [复制]
【发布时间】:2020-05-15 01:08:51
【问题描述】:

我见过这样的事情:

function fnx(){
 ctrl = this;
 this.thisedVar = "thisedVar from fnx"
}

我试图弄清楚它有什么用处。如果执行该函数,然后将其与 ctrl 进行比较,则它们是相同的:

fnx();
console.log(this === ctrl) // true

这就是为什么我不明白将this 分配给变量的目的是什么。

谁能解释一下,好吗?谢谢。

【问题讨论】:

  • 这样你想要的 this 可以从另一个范围访问。例如。在回调内部
  • 你能提供一个小例子吗?我真的很感激。
  • 查看ctrl 的声明位置以及它在其他哪些位置使用。如果您不向我们展示完整的代码,我们无法告诉您它的用途。
  • 如果您在function fnx() { ... } 中声明了另一个函数,并且在该嵌套函数中想要引用fnx,则您不能。通过将fnx 的引用存储为变量,您现在可以从内部的任何位置访问它。
  • 为什么要将一个变量设置为另一个变量。保存对值/对象的引用。这里也一样。在那一刻需要对此进行引用,很难知道它是什么,因为您没有显示所有代码。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript


【解决方案1】:

当您将变量分配给一个值而不使用var 时,它指的是全局变量。因此,如果您将 this 分配给 ctrl 这意味着您将 Window obecjt this 分配给全局变量 `ctrl.

因此,当您将ctrlthis(再次是Window)对象进行比较时,它是相同的,因为您在函数执行后进行匹配。

【讨论】:

    【解决方案2】:

    在大多数情况下,this 的值取决于函数的调用方式(运行时绑定)。执行时不能通过赋值来设置,每次调用函数时可能都不一样。

    您将 THIS 分配给一个变量,以便保存该值。

    阅读更多:https://medium.com/tech-tajawal/javascript-this-4-rules-7354abdb274c

    【讨论】:

      【解决方案3】:

      var a = function() {
      
      	var THIS = this;
      	this.s = "Hello World";
      	this.runMe = function() {
      		window.setTimeout(function() {
      			console.log(this.s);
      		}, 100);
      	}
      	
      }
      
      var a2 = function() {
      
      	var THIS = this;
      	this.s = "Hello World";
      	this.runMe = function() {
      		window.setTimeout(function() {
      			console.log(THIS.s);
      		}, 100);
      	}
      	
      }
      
      b = new(a);
      b.runMe();
      
      b2 = new(a2);
      b2.runMe()

      输出:

      未定义

      你好世界

      类 a(对象 b)返回 undefined,因为 this 在回调范围内。

      类 a2(对象 b2)返回 Hello World,因为 this 属于类 a2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-26
        • 2021-10-27
        • 2012-09-03
        • 2018-02-26
        • 1970-01-01
        • 2021-12-03
        • 2017-10-20
        相关资源
        最近更新 更多