共计 715 个字符,预计需要花费 2 分钟才能阅读完成。
call,apply,bind 三个办法都是用来 扭转 this 指向 的
call 与 appl 会立即调用函数,bind 不会立即调用函数,而是把一个函数作为返回值返回
一:call()函数,第一个参数为 this行将指向 的对象,第二个是可能要传的参数
举个栗子
let obj1 = { | |
name:"Jimmy", | |
age:15, | |
sayHi(){console.log("Nice to meet you,my name is"+this.name) | |
}, | |
eat(food,drink){console.log(this.name+"like eat"+food+" "+drink) | |
} | |
} | |
let obj2 = { | |
name:"Harry", | |
age:16 | |
} | |
obj1.sayHi.call(obj2)//Nice to meet you,my name is Harry | |
obj1.eat.call(obj2,"pizza","cola")//Harry like eat pizza cola |
sayHi()办法的 this,通过 call 指向了 obj2
eat()办法的 this,通过 call 指向了 obj2,并且传递了两个参数 ”pizza”,”cola”
二:apply 函数,和 call 简直截然不同,只需把 ”pizza”,”cola” 两个参数以数组模式传递即可
obj1.eat.apply(obj2,["pizza","cola"])//Harry like eat pizza cola
三: bind()函数,和 call 也是简直截然不同,不同的是,bind 会返回一个函数,才能够应用
let fun = obj1.eat.apply(obj2,"pizza","cola") | |
fun() |
总结:call,apply 会立刻执行,bind 不会
正文完
发表至: javascript
2022-08-29