JavaScript 中 this 的詳解

2021-07-31 06:10:52 字數 1738 閱讀 5798

this 是 js 中定義的關鍵字,它自動定義於每乙個函式域內,但是它的指向卻讓人很迷惑。在實際應用中,this 的指向大致可以分為以下四種情況。

當函式作為乙個普通函式被呼叫,this 指向全域性物件。在瀏覽器裡,全域性物件就是 window。

window

.name

='linxin'

;function

getname

()getname();

// linxin

可以看出,此時 this 指向了全域性物件 window。

在ecmascript5的嚴格模式下,這種情況 this 已經被規定不會指向全域性物件了,而是 undefined。

'use strict'

;function

fun()

fun();

// undefined

當函式作為乙個物件裡的方法被呼叫,this 指向該物件

var

obj =

}obj.getname();

// linxin

如果把物件的方法賦值給乙個變數,再呼叫這個變數:

var

obj =

}var

fun2 =

obj.fun1

;fun2();

// window

此時呼叫 fun2 方法 輸出了 window 物件,說明此時 this 指向了全域性物件。給 fun2 賦值,其實是相當於:

var

fun2 =

function

()

可以看出,此時的 this 已經跟 obj 沒有任何關係了。這時 fun2 是作為普通函式呼叫。

js中沒有類,但是可以從構造器中建立物件,並提供了 new 運算子來進行呼叫該構造器。構造器的外表跟普通函式一樣,大部分的函式都可以當做構造器使用。當建構函式被呼叫時,this 指向了該建構函式例項化出來的物件。

var

person =

function

()var

obj =

new person();

console

.log(obj.name);

// linxin

如果建構函式顯式的返回乙個物件,那麼 this 則會指向該物件。

var

person =

function()}

var obj =

new person();

console

.log(obj.name);

// linshuai

如果該函式不用 new 呼叫,當作普通函式執行,那麼 this 依然指向全域性物件。

var

obj1 =

}var

obj2 =

obj1.getname();

// linxin

obj1.getname.call(obj2);

// linshuai

// linshuai

JavaScript中prototype的理解

prototype使我們能夠向物件新增屬性或者方法。語法 object.prototype.name value 2.基於原型的繼承 obj2 和obj3都是函式foo的例項,可以看到每個例項不僅有自己自身的屬性,還具有原型鏈上的x 也就是foo.prototype 3.prototype與原型 通...

javascript中處理時間

var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...

javascript中處理時間

var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...