js中的this指標的用法

2021-08-10 12:29:40 字數 2380 閱讀 1788

前面把js

的相關知識總結了下,今天把js

中的上下文的this,

對於強型別語言,this

的用法非常的單一,因為他們沒有js

特有的動態繫結。

首先看下面**:

這幾段**就把this

常見的情況給表現出來的差不多了, this

在js中主要有四種用法:

1、作為普通函式使用

2、作為物件方法來使用

3、call 4

、作為建構函式來使用

下面分別說明

1、作為普通函式來使用:

function

funca()

}funca();

//1、hello

這個**很簡單,但也隱藏了乙個坑,就是這個時候的this 

代表的是window

的指標,所以當這段**執行完之後,你再輸出 console.log(window.name)

時候,你會發現輸出為」hello」,

在使用中盡量避免。

2、作為物件方法來使用

var obj=};

obj.show();

這個很簡單,this指向自己,所以this.name就用hello;

如果**修改下:

var obj=};

obj.show();

var obja=

obja.show=obj.show;

obja.show()

這個結果又是什麼呢?答案是」world」,

因為在js

中物件都是引用型別,當obja.show=obj.show

這句**把obja.show

也指向的show

方法,所以在呼叫的時候會把this

,指向obja

而不是obj.

和這個在上面的繼承中的原型冒充中也提過一些,這裡也詳細說明this

在call

中微秒的用法:

function

funca() }

var a = new

funca();

a.show();

var obja =

a.show.call(obja);

上面這段**就是call

的用法,這裡我們可以把**拆解成我們能看的懂的形式:

a.show.call(obja)====>
上面就是call

的類似執行的過程的形勢(實際上並不是這樣的,可以這樣來記),知道了這個執行過程,我們就來**這個的執行過程:

1、把a.show

裡面的方法中的this

全部換成obj. 2

、執行a.show(),

同時把後面的引數作為引數處理。

4、作為建構函式來使用

function

funca(name)

}var a=new funca("hello");

a.show();

作為建構函式使用的時候,在new

的關鍵字建立物件的時候,會先生成乙個空物件,然後呼叫方法,把this

的替換成這個空物件。(這個在上篇有詳細的說明,這裡不多說)。在建立物件的時候,this

指標就指向了建立新物件。

所以上面的那段**我想應該就能看懂為什麼會是這個輸出結果了,唯一的有乙個(objb.show = a.show)();

這個比較奇怪,因為賦值的時候,返回的是右邊的那個函式,所以最終執行的也是a.show();

總結:js

中的this

其實是乙個比較簡單的東西,上面只列出了常用的東西,至於更深入的,可以自己在深入挖掘下,相信有了這個基礎後,再深入的話應試就不是一件枯燥的事了

js中with的用法

with語句用於設定 在特定物件中的作用域。它的語法 with expression statement 例如 var smessage hello with smessage alert touppercase 輸出 hello 在這個例子中,with語句用於字串,所以在呼叫touppercase...

js中this的用法

this是js的乙個關鍵字,隨著函式使用場合不同,this的值會發生變化。但是總有乙個原則,那就是this指的是呼叫函式的那個物件。1 純粹函式呼叫。function test test 其實這裡的this就是全域性變數。看下面的例子就能很好的理解其實this就是全域性物件global。其實這裡的t...

JS中THIS的用法

this 永遠指向函式執行時所在的物件,而不是函式被建立時所在的物件。匿名函式或不處於任何物件中的函式指向 window 例 1var foo foo.bar 輸出 true 2var foo foo.bar 輸出 domwindow 3var foo foobar foo.bar foobar.b...