1. 程式人生 > >this綁定

this綁定

的區別 開始 pan 嚴格模式 span ron 接受 立即執行 等價

默認綁定

  • 默認綁定一般是綁定到window上,嚴格模式下是undefined
1 function mfoo () {
2     let a = 1;
3     console.log(this.a);
4 }
5 let a = 10;
6 mfoo();    // undefined
7 // 默認綁定一般是綁定到window上,嚴格模式下是undefined

隱性綁定

1 function yfoo() {
2     console.log(this.a);
3 }
4 let obj = {
5     a: 10,
6     yfoo: yfoo
7 }
8 yfoo();        //
undefined 默認綁定 等價於window.a 9 obj.yfoo(); // 10 隱性綁定 函數yfoo執行的時候有了上下文對象,即obj。

顯性綁定

  • 使用call、apply或者bind進行顯性綁定
  • call 、apply 和 bind 這三者的區別
    • call 從第二個參數開始所有的參數都是原函數的參數
    • apply 只接受兩個參數,且第二個參數必須是數組,這個數組代表原函數的參數列表
    • bind 只有一個參數,且不會立即執行,知識將一個值綁定到函數的 this 上,並將綁定好的函數返回。
1 function bfoo () {
2     console.log(this
.a); 3 } 4 5 let bobj = { a: 10 }; 6 bfoo = bfoo.bind(bobj); 7 8 bfoo(); // 10

1 function xfoo () {
2     console.log(this.a);
3 }
4 let xobj = {
5     a: 888
6 }
7 xfoo.call(xobj);
8 
9 xfoo.apply(xobj);

new綁定

1 function nfoo () {
2     this.a = 10;
3     console.log(this);
4 }
5 nfoo();    
6 console.log(window.a); 7 let nobj = new nfoo(); 8 console.log(nobj.a);

this綁定