前面把js
的相關知識總結了下,今天把js
中的上下文的this,
對於強型別語言,this
的用法非常的單一,因為他們沒有js
特有的動態繫結。
首先看下面**:
這幾段**就把this
常見的情況給表現出來的差不多了, this
在js中主要有四種用法:
1、作為普通函式使用
2、作為物件方法來使用
3、call 4
、作為建構函式來使用
下面分別說明
1、作為普通函式來使用:
function這個**很簡單,但也隱藏了乙個坑,就是這個時候的thisfunca()
}funca();
//1、hello
代表的是window
的指標,所以當這段**執行完之後,你再輸出 console.log(window.name)
時候,你會發現輸出為」hello」,
在使用中盡量避免。
2、作為物件方法來使用
var obj=};
obj.show();
這個很簡單,this指向自己,所以this.name就用hello;
如果**修改下:
var obj=};這個結果又是什麼呢?答案是」world」,obj.show();
var obja=
obja.show=obj.show;
obja.show()
因為在js
中物件都是引用型別,當obja.show=obj.show
這句**把obja.show
也指向的show
方法,所以在呼叫的時候會把this
,指向obja
而不是obj.
和這個在上面的繼承中的原型冒充中也提過一些,這裡也詳細說明this
在call
中微秒的用法:
function上面這段**就是callfunca() }
var a = new
funca();
a.show();
var obja =
a.show.call(obja);
的用法,這裡我們可以把**拆解成我們能看的懂的形式:
a.show.call(obja)====>上面就是call
的類似執行的過程的形勢(實際上並不是這樣的,可以這樣來記),知道了這個執行過程,我們就來**這個的執行過程:
1、把a.show
裡面的方法中的this
全部換成obj. 2
、執行a.show(),
同時把後面的引數作為引數處理。
4、作為建構函式來使用
function作為建構函式使用的時候,在newfunca(name)
}var a=new funca("hello");
a.show();
的關鍵字建立物件的時候,會先生成乙個空物件,然後呼叫方法,把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...