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