本篇文章为大家展示了javascript中这个的作用域是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> 1。全局的函数调用强>
,, function globalTest (), { ,,,this.name =,“global this"; ,,,console.log (this.name); ,,} globalTest才能();,//global 这
以上代码中,globalTest()是全局性的方法,属于全局性调用,因此本就代表全局对象窗口。为了充分证明这是窗口,对代码做如下更改:
,, var name =,“global this"; function 才能;globalTest (), { ,,,console.log (this.name); ,,} globalTest才能();,//global 这个
名称作为一个全局变量,运行结果仍然是“全球”,说这明指向的是窗口。在方法体中我们尝试更改全局的名字,再次调用方法输出“重命名全球“,说明全局的名字在方法内部被更改。代码如下:
,, var name =,“global this"; function 才能;globalTest (), { ,,,this.name =,“rename global this" ,,,console.log (this.name); ,,} globalTest才能();,//rename global 这
根据以上三段代码,我们得出结论:对于全局的方法调用,这指向的是全局对象窗口,即调用方法所在的对象。
<强> 2。对象方法的调用
强>
如果函数作为对象的方法调用,这指向的是这个上级对象,即调用方法的对象。在以下代码中,这指向的是obj对象。
,, function showName (), { ,,,console.log (this.name); ,,} var 才能;obj =, {}; obj.name =,才能“ooo"; 时间=obj.show 才能;showName; obj.show才能();,ooo//
<强> 3。构造函数的调用强>
构造函数中这个指的向新创建的对象本身。
,, function showName (), { ,,,this.name =,“showName function"; ,,} var 才能;obj =, new showName (); console.log才能(obj.name);,//showName 函数
上述代码中,我们通过新关键字创建一个对象的实例,新关键字可以改变这样的指向,将这个这指向对象obj。
我们再增加一个全局的名字,用以证明这指向的不是全球:
,, var name =,“global name"; function 才能;showName (), { ,,,this.name =,“showName function"; ,,} var 才能;obj =, new showName (); console.log才能(obj.name);//showName 函数 console.log才能(名字),,//global 名称
在构造函数的内部,我们对this.name进行赋值,但并没有改变全局变量名称。
<强> 4.应用/电话调用时的这个强>
应用和电话都是为了改变函数体内部的这一指向。其具体的定义如下:
<强>调用方法:强>
<>强语法:强>调用(thisObj、对象)
<强>定义:>强调用一个对象的一个方法,以另一个对象替换当前对象。
<强>说明:强>
调用方法可以用来代替另一个对象调用一个方法打电话给方法可将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。
如果没有提供thisObj参数,那么全球对象被用作thisObj。
<强>应用方法:强>
<>强语法:强>应用(thisObj, [argArray])
<强>定义:强>应用某一对象的一个方法,用另一个对象替换当前对象。
<强>说明:强>
如果argArray不是一个有效的数组或者不是参数对象,那么将导致一个TypeError。
如果没有提供argArray和thisObj任何一个参数,那么全球对象将被用作thisObj,并且无法被传递任何参数。
,, var value =,“global value"; function 才能;FunA (), { ,,,this.value =,“AAA"; ,,} function 才能;FunB (), { ,,,console.log (this.value); ,,} FunB才能();,//Global value 因为是在全局中调用的FunB (), this.value指向全局的价值 FunB.call才能(窗口);,//Global 价值,这指向窗口对象,因此this.value指向全局的价值 FunB.call才能(new FunA ());,//AAA,,这指向参数new FunA(),即FunA对象 FunB.apply才能(窗口);//Global 价值 FunB.apply才能(new FunA ());,//AAA
在上述代码中,这样的指向在调用和应用中是一致的,只不过是调用参数的形式不一样打电话给是一个一个调用参数,而应用是调用一个数组。具体的会在以后的博文中单独阐述。