1、四種指向數組
1. 全局環境 -> windowapp
2.對象環境 -> 對象函數
3. 構造函數環境 -> 實例對象this
4. 事件對象 -> 調用者spa
總結:誰調用指向誰對象
2、兩種改變指向的方式事件
1. call/apply 方式it
2. 定義局部變量的方式:var that = this;io
3、特例console
1. 若是返回值是一個對象,那麼this指向的就是那個返回的對象,若是返回值不是一個對象那麼this仍是指向函數的實例。
function fn() { this.user = '追夢子'; return {}; // function(){}/[]/Date/Array } var a = new fn; console.log(a.user); //undefined
fn 裏 return functio(){} 時,打印一樣爲 undefined
function fn()
{
this.user = '追夢子';
return 1; // 0/true/false/undefined/null/
}
var a = new fn;
console.log(a.user); //追夢子
只要不是一個對象(引用類型),都會正常返回
注:雖然 null 也是對象,可是 null 是個特例
2. //Array[index](); 等同於數組對象直接打點調用函數
function foo(){
console.log(this.length);
}
var arr = [foo,2,3,4];
arr[0](); //4
3. setInterval(obj.fun,1000);obj.fun中的this必定指向window。由於setInterval(),setTimeout()至關於window.setInterval(),仍是window調用
var a = 12;
var obj = {
a : 1,
fun : function(){
console.log(this.a);
}
}
setInterval(obj.fun, 1000); // 12
setInterval(obj.fun(), 1000); // 1 注:會中止定時任務,且運行後當即打印,不會等到1s後才執行打印
//讓obj.fun中的this指向obj,須要寫在function()中
setInterval(function(){
obj.fun();
},1000); // 1