星空网 > 软件开发 > Java

深入理解this机制系列第二篇——this绑定优先级

前面的话

  上一篇介绍过this的绑定规则,那如果在函数的调用位置上同时存在两种以上的绑定规则应该怎么办呢?本文将介绍this绑定的优先级

 

显式绑定 pk 隐式绑定

  显式绑定胜出

function foo() {  console.log( this.a );}var obj1 = {  a: 2,  foo: foo};var obj2 = {  a: 3,  foo: foo};obj1.foo(); // 2obj2.foo(); // 3
//在该语句中,显式绑定call(obj2)和隐式绑定obj1.foo同时出现,最终结果为3,说明被绑定到了obj2中obj1.foo.call( obj2 ); // 3obj2.foo.call( obj1 ); // 2

 

new绑定 pk 隐式绑定

  new绑定胜出

function foo(something) {  this.a = something;}var obj1 = {foo: foo};var obj2 = {};obj1.foo( 2 );console.log( obj1.a ); // 2obj1.foo.call(obj2,3);console.log( obj2.a ); // 3//在下列代码中,隐式绑定obj1.foo和new绑定同时出现。最终obj1.a结果是2,而bar.a结果是4,说明this被绑定在bar上var bar = new obj1.foo( 4 );console.log( obj1.a ); // 2console.log( bar.a ); // 4

 

new绑定 pk 显式绑定

  new绑定胜出

function foo(something) {  this.a = something;}var obj1 = {};//先将obj1绑定到foo函数中,此时this值为obj1var bar = foo.bind( obj1 );bar( 2 );console.log(obj1.a); // 2//通过new绑定,此时this值为bazvar baz = new bar( 3 );console.log( obj1.a ); // 2//说明使用new绑定时,在bar函数内,无论this指向obj1有没有生效,最终this都指向新创建的对象bazconsole.log( baz.a ); // 3

 

顺序

  【1】是否是new绑定?如果是,this绑定的是新创建的对象

var bar = new foo();

  【2】是否是显式绑定?如果是,this绑定的是指定的对象

var bar = foo.call(obj2);

  【3】是否是隐式绑定?如果是,this绑定的是属于的对象

var bar = obj1.foo(); 

  【4】如果都不是,则使用默认绑定

var bar = foo();

 




原标题:深入理解this机制系列第二篇——this绑定优先级

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

7000+账号被删!亚马逊这类产品危险了!脱毛仪类目变狗的解决方法来了!:https://www.ikjzd.com/articles/129238
盘点大卖盈亏经验,助力中小卖家备战亚马逊旺季:https://www.ikjzd.com/articles/129239
Q2 季度国际业务净赚3.45亿!亚马逊全球布局独树“疫”帜:https://www.ikjzd.com/articles/129242
旺季+疫情,2020下半年跨境卖家物流之路怎么走?:https://www.ikjzd.com/articles/129243
在亚马逊做欧洲站,不知道VAT可不行:https://www.ikjzd.com/articles/129244
亚马逊卖家如何有效监控竞争对手?:https://www.ikjzd.com/articles/129245
长治婚庆女司仪和主持人:https://www.vstour.cn/a/366176.html
北京丰台区水上乐园哪家好玩?:https://www.vstour.cn/a/366177.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流