一、含义
-
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
转载:https://blog.csdn.net/yoonerloop/article/details/128512242
查看评论