this以及apply,call,bind之间的区别

**

this以及apply,call,bind之间的区别

  • 关于this对象

    每个函数都有自己的执行环境。全局执行环境是最外围的一个执行环境。this指向的就是当前代码所在的执行环境。

  • 它们之间的关系

    1. 在浏览器里,在全局范围内this 指向window对象
    2. 在函数中,this永远指向最后调用他的那个对象
    3. 构造函数中,this指向new出来的那个新的对象
    4. call、apply、bind中的this被强绑定在指定的那个对象上
    5. 箭头函数中this比较特殊,箭头函数this为父作用域的this,不是调用时的this.要知道前四种方式,都是调用时确定,也就是动态的,而箭头函数的this指向是静态的,声明的时候就确定了下来
    6. apply、call、bind都是js给函数内置的一些API,调用他们可以为函数指定this的执行,同时也可以传参
  • ** 改变this指向的几种方法以及之间的区别:**

    1、apply()和call()

    每个函数都包含两个非继承而来的方法: appy()和call()。这两个方法的用途都是在特定的作用域中调用函数,然后可以设置调用函数的this指向。

    1 、apply()方法接受两个参数,一是作用域,二是参数(可以是数组也可以是arguments对象)

    2、call()的使用和apply()基本是一样的,不同的是参数的传递,call()必须明确的传入每一个参数。

    2、bind()

    ECMAScript还定义了一个叫bind()的方法。这个方法会创建一个函数的实例,其this值会被绑定给传入bind()函数的值。

区别:

​ 1,传参不同:call通过“,”分隔的形式传递参数,前面是函数名

​ 例:函数名.call(目标对象,参数一,参数二)

​ apply参数使用数组进行传参

​ 例:函数名.apply(目标对象,参数一,参数二)

​ bind传参“,”分隔开,因为bind返回的是一个函数所以调用要加上括号

​ 例:函数名.bind(目标对象,参数一,参数二)()

​ 2,函数是否执行:首先呢call和apply都是直接调用的,而bind上需要加上小括号才能调用

call apply实现原理

​ call实现原理:call的原理是基于函数来实现的,

​ 主要做的事情是,给目标对象添加一个临时事件,实现后删除这个临时的事件,这个方法用到

​ 了argument来接收参数,在接收参数的时要去掉参数的第一个obj事件,利用eval执行字符串

​ 的方法

​ apply实现原理:apply基本是与call一样的实现原理,不过在接受参数的for循环时,它的参数是一个数组所

​ 已不用去删除第一个参数就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值