apply call bind 它们是一个能够扭转函数this指向的办法
// 以call为例
var name = 'window name'
function show_name(){
console.log(this.name)
}
show_name() // window name
var person = {
name: 'person name'
}
show_name.call(person) // person name
apply call bind 同时能够向函数外部传递参数
// 以call为例
var name = 'window name'
function show_info(age,sex){
console.log(this.name + ':' + 'age:' + age + 'sex:' + sex)
}
show_info(28,'男') // window name:age:28sex:男
var person = {
name: 'person name'
}
show_info.call(person,28,'男') // person name:age:28sex:男
三者的区别
- apply和call 都能够被动触发函数调用,bind具备返回值,须要手动触发
- call和bind的传参模式一样,apply是以数组的模式传参
// apply和call 都能够被动触发函数调用,bind须要手动触发
function show_info(age,sex){
console.log(this.name)
}
var person = {
name: 'person name'
}
show_info.call(person) // person name
show_info.bind(person) // 无成果
const fun = show_info.bind(person)
fun()
// call和bind的传参模式一样,apply是以数组的模式传参
function show_info(age,sex){
console.log(this.name + ':' + 'age:' + age + 'sex:' + sex)
}
var person = {
name: 'person name'
}
show_info.call(person,28,'男') // person name:age:28sex:男
const fun = show_info.bind(person,28,'男')
fun() // person name:age:28sex:男
show_info.apply(person,[28,'男']) // person name:age:28sex:男
注:es6中箭头函数不能用以上办法批改this指向
发表回复