this綁定
阿新 • • 發佈:2018-12-15
的區別 開始 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綁定