call、apply、bind 的用法

2021-09-02  本文已影响0人  AuraAura

红宝书上定义:每个函数都包含两个非继承而来(即在构造函数Function的 prototype)的方法。apply()和call(),在特定的作用域上调用函数,实际上等于设置函数体内this对象的值。

apply()方法接受两个参数,第一个参数是运行该函数的作用域(即调用该函数的对象),第二个参数是函数参数数组。
call()第一个参数和apply()一样,从第二个参数开始,是传递给函数的所有参数

var name = 'aaa'//全局变量name
function sayHi(a, b) {
    console.log(this.name + ',你好!说' + a + ',' + b)
}
var o = {
    name: 'bbb'
}
sayHi.call(this, 1, 2)//全局作用域下调用,this默认指向Window
sayHi.call(o, 1, 2)//将this指向o
sayHi.apply(this, [1, 2])
sayHi.apply(o, [1, 2])
call和apply.png

bind()会创建一个函数实例,this的值会被绑定到传给bind()的值。bind的第一个参数和call apply 一样指定执行上下文,从第二个参数开始和call 一样,顺序传入函数的参数。

var newSayHi = sayHi.bind({ name: 'ccc' }, 1, 2)
newSayHi()
bind.png

sayHi.bind({ name: 'ccc' }, 1, 2)将新的ccc对象传给了this,即使在全局作用域下调用newSayHi也能将this指向ccc

总结

上一篇下一篇

猜你喜欢

热点阅读