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绑定的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin Android Studio - setContenView - 绑定(片段)

使用绑定从片段访问父活动的 UI 元素

很实用的JQuery代码片段(转)

laravel特殊功能代码片段集合

在约束布局中查看片段的绑定不起作用

如何组合绑定片段而不将它们包装在 XML 文字中