将对象分配给函数"this"变量有什么用?



我见过这样的事情:

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

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

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

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

请问谁能解释一下?谢谢。

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。

当您将变量分配给值而不使用var时,它指的是全局变量。因此,如果您将this分配给ctrl则意味着您将 Window obecjtthis分配给全局变量 'ctrl。

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

在大多数情况下,值由函数的调用方式(运行时绑定(决定。它不能在执行期间通过赋值设置,并且每次调用函数时它可能会有所不同。

将 THIS 分配给变量,以便保存此值。

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

最新更新