this的指向問題

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
相關文章
相關標籤/搜索