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