一、含义
function test() {
console.log('----')
}
//执行
test();
test.call()
结果一致,调用test()默认会调用call,二者效果一致,call省略掉了。
二、改变this指向
call还有一个很重要的功能是改变this的指向。
function Car(brand, color) {
this.brand = brand;
this.color = color;
this.run = function () {
console.log('run 方法')
}
}
let newCar = {
age: 30
}
1、不用 call
console.log('newCar', newCar)
打印结果:{}
2、使用 call
//参数1:对象,参数2,3,4……:其他参数
Car.call(newCar, '兰博基尼', 'red')
console.log('newCar', newCar)
打印结果:
{
"brand": "兰博基尼",
"color": "red"
}
可以看出改变了this 的指向,和apply的区别是后面是一个数组,其他没啥区别,均可以改变this 指向Car.apply(newCar, ['兰博基尼', 'red'])。
三、应用
function Compute() {
this.plus = function (a, b) {
console.log(a + b)
}
this.minus = function (a, b) {
console.log(a - b)
}
}
function FullCompute() {
Compute.apply(this)
this.mul = function (a, b) {
console.log(a * b)
}
this.div = function (a, b) {
console.log(a / b)
}
}
const compute = new FullCompute();
compute.plus(1,1);
compute.minus(1,1);
compute.mul(1,1);
compute.div(1,1);
打印结果:
四、全局this和函数this
全局定义的this和函数内部定义的 this 相当于 window,例如:
function test() {
this.a = 1;
let b = 2
}
test();
console.log(a); // 1
console.log(b); // b is not defined