call,apply,bind的区别

2020-04-18  本文已影响0人  郭先生_515

它们都可以改变当前对象的this指向问题

let obj = {
    name: this.name,
    age: this.age,
    objFun: function(fm, t) {
        console.log(`姓名:${this.name}, 年龄:${this.age}, 来自:${fm}, 去:${t}`);
    }
}

let my = {
    name: 'Guoda',
    age: 99
}

obj.objFun.call(my, '河南', '北京')
obj.objFun.apply(my, ['河南', '北京'])
obj.objFun.bind(my, '河南', '北京')()
obj.objFun.bind(my, ['河南', '北京'])()

根据控制台输出:

14----姓名:Guoda, 年龄:99, 来自:河南, 去:北京
15----姓名:Guoda, 年龄:99, 来自:河南, 去:北京
16----姓名:Guoda, 年龄:99, 来自:河南, 去:北京
17----姓名:Guoda, 年龄:99, 来自:河南,北京, 去:undefined

从上面结果可以看出:

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,差别在于第二个参数

call 的参数是直接放进去的,第二,第三,第 n 个参数,全都用逗号分隔,直接放在后面。

apply 的所有参数都必须放在一个数组里面传进去。

bind 除了返回是函数以外,它的参数和 call 一样。

上一篇 下一篇

猜你喜欢

热点阅读