码迷,mamicode.com
首页 > 其他好文 > 详细

this绑定

时间:2018-12-15 00:19:52      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:区别   列表   一个   win   fine   绑定   数列   OLE   等价   

默认绑定

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

标签:区别   列表   一个   win   fine   绑定   数列   OLE   等价   

原文地址:https://www.cnblogs.com/let423/p/10122151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!