js中this的绑定规则

共有四种绑定规则。

1.默认绑定

函数在调用的时候,没有给它绑定任何的就是作为独立函数来使用的。
例一:
在这里插入图片描述
例二:
在这里插入图片描述
例三:
在这里插入图片描述

2.隐式绑定

通过某个对象进行调用,也就是它的调用位置中,是通过某个对象发起的函数调用,让它作为某个对象的方法进行调用。
隐式绑定有一个前提条件:必须在调用的对象内部有一个对函数的引用(比如一个属性)
正是通过这个引用,间接的将this绑定到了这个对象上。
例一:
在这里插入图片描述
例二:
在这里插入图片描述

3.显式绑定

1)call和apply方法

如果不希望在对象内部包含这个函数的引用,同时又希望在这个对象上进行强制调用,就需要使用JavaScript所有的函数都可以使用的call和apply方法(这个和Prototype有关)
call和apply都可以调用函数:
在这里插入图片描述
在这里插入图片描述
这三种都能够调用函数,直接调用函数和使用这两种方式调用函数的区别在于this绑定的不同。
foo直接调用指向的是全局对象(window)。
在这里插入图片描述
在这里插入图片描述
call和 apply的区别:
它们两个传递参数的格式不太一样。
在这里插入图片描述
call是直接在括号里,以逗号为间隔传递参数;apply是需要将这些参数放进数组中加以传递。
call和apply在执行函数时,是可以明确绑定this的,这个绑定规则称之为显示绑定。

2)bind显示绑定

如果想要多次调用下面的这个foo函数,且需要将this绑定为aaa,那么下面的写法会比较繁琐,可以使用bind直接一次性绑定在aaa上。
在这里插入图片描述
bind绑定:
在这里插入图片描述
可以看到上述代码中,调用函数是直接调用的,但是已经使用bind绑定过了,这个时候其实存在一个默认绑定和显示绑定bind的冲突,是有优先级的,显示绑定优先于默认绑定。
如果想要在后面传递参数,是和call是一样的。
在这里插入图片描述
也就是bind绑定了之后赋值newFoo,这个newFoo是一个新的函数对象,和原来的foo不是一块内存空间。

4.new绑定

JavaScript中的函数可以当做一个类的构造函数来使用,也就是使用new关键字。
使用new关键字来调用函数时,会执行下面的操作:

  • 创建一个全新的对象
  • 这个新对象会被执行prototype连接(原型连接)
  • 这个新对象绑定到函数调用的this上(this的绑定在这个步骤完成)
  • 如果函数没有返回其他对象,表达式会返回这个新对象

代码解释上述概念性的内容:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值