call apply bind 改变this指向

call apply bind 改变this指向

call apply bind这三个方法是在前面课程的哪一小节学习过的,我没找到正确的对应位置,老师在本节视频里面说的三者的this指向问题也没有理解

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕言 2021-04-20 11:31:07

同学你好,这边测试,将类数组转成数组,使用call和apply都是可以的。同学可以特殊记一下,祝学习愉快~



好帮手慕言 2021-04-19 11:47:39

同学你好,解答如下:

1、call和apply,在之前的课程中有过详细讲解,课程链接:https://class.imooc.com/lesson/1628#mid=39918

使用bind的课程链接:https://class.imooc.com/lesson/1835#mid=41914

2、是不理解老师手动封装的bind1函数吗?如果是的话,可以参考下方:

// 模拟 bind
Function.prototype.bind1 = function() {
    // 将参数拆解为数组
    // Array.prototype.slice.call()是一个固定的用法,可以将类数组转成数组
    const args = Array.prototype.slice.call(arguments)

    // 获取 this(数组第一项),就是调用bind1方法时,传递的第一个参数:{x: 100}
    const t = args.shift()

    // 谁调用函数,函数中的this指向的就是谁,fn1.bind1(...) 这样写,bind1函数中的this指向fn1
    const self = this
    // 返回一个函数
    return function() {
        // 调用fn1函数,并把fn1中的this改为{x: 100},此处的args就是10,20,30
        return self.apply(t, args)
    }
}

function fn1(a, b, c) {
    console.log('this', this)
    console.log(a, b, c)
    return 'this is fn1'
}

const fn2 = fn1.bind1({
    x: 100
}, 10, 20, 30)
const res = fn2()
console.log(res)

关于this的指向,老师在面向对象的第三章有详细的讲解,同学可以去回顾下,链接:https://class.imooc.com/course/1628

祝学习愉快~

  • 提问者 慕圣2339050 #1

    将数组转化为类数组这里有个疑问,既然arguments是类数组,为什么不用apply,而用call呢

    2021-04-19 20:41:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师