this老是指向一個對象,而具體指向哪一個對象是在運行時基於函數的執行環境動態綁定的,而非函數被聲明時的環境。
this的指向大體能夠分爲如下四種:
◎ 做爲對象的方法調用
◎ 做爲普通函數調用
◎ 構造器調用
◎ Function.prototype.call或Function.prototype.apply調用數組
var obj={ myName:"sven", getName:function(){ return this.myName; } } console.log(obj.getName());//輸出:"sven" var getName2 = obj.getName; console.log(getName2());//輸出:"undefined"
分析:閉包
驗證:app
//設置全局變量 var myName = "Windows.name"; var obj={ myName:"sven", getName:function(){ return this.myName; } } console.log(obj.getName());//輸出:"sven" var getName2 = obj.getName; console.log(getName2());//輸出:"Windows.name"
apply(obj,[argument1,argument2,….]) 接收兩個參數:【參數1】一個對象,用於指定this的指向,默認不設置或者設置爲null的狀況下指向的是window。【參數2】傳入參數的一個數組,參數個數是肯定的。
call(obj,argument1,argument2,….) 接收不肯定參數:【第一個參數】一個對象,用於指定this的指向,默認不設置或者設置爲null的狀況下指向的是window。【後面的參數】傳入的參數,參數個數是不肯定的。
代碼驗證:函數
接着上面的代碼:this