this 是在函數執行的過程中自動創建的一個指向一個對象的內部指針。確切的說,this并不是一個對象,而是指向一個已經存在的對象的指針,也可以認為是this就是存儲了某個對象的地址。
this的指向不是固定的,會根據調用的不同,而指向不同的地方。
this的綁定可以分為四種:
1.默認綁定
2.隱式綁定
2.new 綁定
3.顯示綁定
1、默認綁定
當我們直接調用一個函數的時候,這個函數作用的this就是默認綁定,
默認綁定在window中
注意:在嚴格模式下("use strict"),默認綁定在undefined
function foo(){
console.log(this);
}
foo(); //直接調用,默認綁定 this 指代window
2、隱式綁定
使用 對象.方法() 這就是隱式綁定
方法中的this綁定在前面的對象中
var p = {
name : "asd",
foo : function(){
console.log(this.name)
}
}
p.foo(); //this 指代的就是p
![Uploading Paste_Image_131291.png . . .]
3.new 綁定
this 指代將來創建的那個對象
function Person(){
this.name = "a";
console.log(this.name);
}
var p = new Person(); //這個時候 Person中的this就是指的p
4.顯示綁定
call 、apply 只有這次調用的時候this顯示綁定
var p1 = {
name : "李四",
age : 23,
eat : function(){
console.log(this.name)
}
}
var p2 = {
name : "李五",
age : 22
}
p1.eat.call(p2); //this 指代p2
//使用call的時候,第一個參數表示p1中的this的執行,后面的參數為向這個函數傳的值。
//注意一點:如果第一個參數是null,則this仍然是默認的指向。
bind 會返回一個新的函數,永遠綁定
Paste_Image.png
5.綁定丟失問題
-
回調函數的綁定丟失問題
Paste_Image.png - 顯示 綁定傳入undefined和null的時候的問題
this就會變成默認綁定 (window)