JavaScript 中 this 的詳解

2021-09-16 23:50:39 字數 1482 閱讀 3750

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

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...