js中的call和apply
- 1.call()可以调用某一函数
- 2.call()可以这个函数的this指向
- 3.call()也可以接受参数
每次看到js中的call方法,都是懵逼的要去查查百度,自己研究记录下
1.call()可以调用某一函数
testCall() {
let person = {
fullName: function () {
console.log(this)
console.log(this,this.firstName + " " + this.lastName)
}
}
person.fullName() //打印的结果是undefined undefined,this的指向的是person对象
person.fullName.call() //打印会报错,这里的this是undefined
}
可以看出,person.fullName()和person.fullName.call()都执行了fullName方法,只是结果不同
2.call()可以这个函数的this指向
testCall() {
let person = {
fullName: function () {
console.log(this)
console.log(this,this.firstName + " " + this.lastName)
}
}
let person1 = {
firstName: "小",
lastName: "小怪"
}
person.fullName() //打印的结果是undefined undefined,this的指向的是person对象
person.fullName.call(person1); //打印结果是"小 小怪",this指向的是person1对象
}
看出了,call能改变this的指向
3.call()也可以接受参数
testCall() {
console.log(window)
let person = {
fullName: function (hello,age) {
console.log(this)
console.log(this,this.firstName + " " + this.lastName + hello+age)
}
}
let person1 = {
firstName: "小",
lastName: "小怪"
}
person.fullName() //打印的结果是undefined undefinedundefinedundefined,this的指向的是person对象
person.fullName.call(person1,'你好呀',18); //打印结果是"小 小怪你好呀18",this指向的是person1对象
}
同理的,apply的效果和call的作用是一一样的,唯一的区别就是传参数的话方式不同,call是一个个传,apply是传的数组