将“this”对象分配给函数内的变量有啥用? [复制]

Posted

技术标签:

【中文标题】将“this”对象分配给函数内的变量有啥用? [复制]【英文标题】: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/… 【参考方案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。

【讨论】:

以上是关于将“this”对象分配给函数内的变量有啥用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

右值引用成员变量有啥用

JavaScript“绑定”方法有啥用?

C语言中的class函数有啥用~

python中构建了一个类,在定义了一个函数时为啥括号第一个self有啥用,为啥不能给他赋值

C语言的malloc函数有啥用

将派生对象分配给函数内的基类指针