如何理解this?改变this的几种方法?bind call和apply的区别?

this是什么?

this是函数运行时,函数内部自动生成的一个对象,只能在函数内部使用。

可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。

javaScript 中函数的调用有以下几种方式:作为对象方法调用,作为函数调用,作为构造函数调用,和使用 apply 或 call 调用。在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。很多 JavaScript 中的技巧以及类库都用到了该方法。

this关键字虽然会根据环境变化,但是它始终代表的是调用当前函数的那个对象。

改变this的几种方法?

1.使用ES6的箭头函数

箭头函数的 this 始终指向函数定义时的 this,箭头函数中没有 this 绑定,必须通过查找作用域链来决定其值,如果箭头函数被非箭头函数包含,则 this 绑定的是最近一层非箭头函数的 this,否则,this 为 undefined。

2.使用apply .call.bind,同时解释三者的区别。

三种方式都可以改变this指向

var name = 'windows';
    function sayName() {
        return this.name;
    }
    function sayBindName() {
        return this.name;
    }
    var obj = {
        name: 'john',
        sayName: sayName,
        sayBindName: sayBindName.bind(window) // 这里也可以用call 或者apply,只不过在log的时候要吧sayBindName后面的()去掉,因为bind不会立即执行,而call和apply会立即执行
    }
    console.log(obj.name, obj.sayName(), obj.sayBindName()); // jhon, jhon , windows

三者的区别:apply()接受两个参数,第一个事要绑定的this指向的对象,第二个是一个包含多个参数的数组。

call() 和apply()的区别在于第二个参数不同,call()接受多干个参数列表

bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。需要手动调用。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值