JS中this的四种绑定方式

1.this的默认绑定

凡是函数作为独立函数调用,无论它的位置在哪里,它的行为表现,都和直接在全局环境中调用一样。(即默认绑定window)

2.this的隐式绑定

当函数被一个对象“包含”的时候,我们称函数的this被隐式绑定到这个对象里面了,这时候,通过this可以直接访问所绑定的对象里面的其他属性。

1.在隐式绑定中,如果函数调用位置是在一串对象属性链中,this绑定的是最内层的对象。

2.当函数引用有上下文对象时,隐式绑定规则会把函数调用中的this绑定到这个上下文对象。

this的隐式绑定所存在的this绑定丢失的问题,也就是对于 “ fireInGrobal = obj.fire”。(引用函数本身,不带有函数对象的上下文,即隐式丢失问题

fireInGrobal调用和obj.fire调用的结果是不同的,因为这个函数赋值的过程无法把fire所绑定的this也传递过去。这个时候,

3.this的显式绑定:(call和bind方法)

call的基本使用方式: fn.call(object) (apply与call基本类似,不多说)

fn是你调用的函数,object参数是你希望函数的this所绑定的对象。

fn.call(object)的作用:

1.即刻调用这个函数(fn)

2.调用这个函数的时候函数的this指向object对象 

call和bind的区别是:在绑定this到对象参数的同时: 

1.call将立即执行该函数

2.bind不执行函数,只返回一个可供执行的函数 

在隐式绑定下:函数和只是暂时住在“包含对象“的旅馆里面,可能过几天就又到另一家旅馆住了

在显式绑定下:函数将取得在“包含对象“里的永久居住权,一直都会”住在这里“

4.new绑定

执行new操作的时候,将创建一个新的对象,并且将构造函数的this指向所创建的新对象 

1

2

3

4

5

6

7

8

9

10

11

function foo (a) {

  this.a = a;

}

var a1 = new foo (1);

var a2 = new foo (2);

var a3 = new foo (3);

var a4 = new foo (4);

console.log(a1.a); // 输出1

console.log(a2.a); // 输出2

console.log(a3.a); // 输出3

console.log(a4.a); // 输出4

this绑定规则

  • new > 显示绑定 > 隐式绑定 > 默认绑定

注意:

箭头函数:不使用这四个this规则,根据词法作用域来决定this。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值