call/apply/bind都是函数的方法
Fun.call 改变函数中this指针
function Boy() {
this.age = 17
this.say = function (name, text) {
console.log('我叫'+name+','+ ++this.age +'岁' + ',' + text)
}
}
const girl = {
age : 16
}
const b = new Boy()
b.say('小强', '我喜欢唱歌')
// call apply bind 都是改变了原来函数中的this指针
b.say.call(girl, '小芳', '我喜欢跳舞') // 立即执行
b.say.apply(girl, ['小芳', '我喜欢跳舞']) // 立即执行 区别与call是传递参数的方式不同
const fun = b.say.bind(girl, '小芳', '我喜欢跳舞') // 不立即执行 返回函数
fun()
使用call实现继承
function Fish() {
this.swim = function (){
console.log('我可以游泳')
}
}
function Bird() {
this.fly = function (){
console.log('我可以飞')
}
}
function Cat() {
Fish.call(this)
Bird.call(this)
}
const c = new Cat()
c.fly()
c.swim()