this绑定
Posted let423
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
以上是关于this绑定的主要内容,如果未能解决你的问题,请参考以下文章