Js中this是在運行的時候進行綁定的,這是Js中this關鍵字具有多重含義的本質緣由。因此,Js中的this能夠是全局對象、當前對象或者是任意對象。這徹底取決於函數的調用方式,而js中函數的調用有如下幾種方式:數組
根據如下判斷,判別this分別指向什麼:
1.函數調用是用new進行調用的嗎?若是是,則this指向新建立的對象,不然進行下一步判斷
2.判斷該函數是不是用dot(.)進行調用的,若是是的話,那麼this指向dot(.)以前的對象;不然this指向全局對象window.app
四種調用方式中this的指向函數
函數調用模式中this指全局對象(window)學習
var f1 = function() { alert("這個是函數調用"); alert(this);//window }; f1();
方法調用
由對象調用方法(當對象爲null的時候,函數進行函數調用模式,當對象不爲null的時候,函數實現方法調用模式)
在方法調用模式中 this 表示當前對象this
var o = {name:"小明"}; o.say = function() { alert(this.name);//小明 alert(this);//o }; o.say();
任何一個函數放在new 後面就是構造函數,構造函數的this是構造函數返回的對象,構造函數的return發生變化,若是返回的是對象,直接返回,不然返回建立出來的對象
如code
var Person = function(n) { this.name = n; return { name:"男", get:function(){ console.log(this.name); }; // return 123; } var p = new Person();
函數的apply調用模式和call調用模式
語法:
函數名.apply(對象, [參數數組]);
函數名.call(對象, 參數列表);
如對象
var func = function() { this.name = "小明"; this.say = function(){alert(this.name + "學習好");}; }; func.apply(null); // 等價於 func();