this绑定

默认绑定

  • 默认绑定一般是绑定到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);

猜你喜欢

转载自www.cnblogs.com/let423/p/10122151.html