js函数之call和apply

Posted 一杯清泉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js函数之call和apply相关的知识,希望对你有一定的参考价值。

一、含义

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

以上是关于js函数之call和apply的主要内容,如果未能解决你的问题,请参考以下文章

js 之 call apply

JS复习之Call和Apply

js 难点之call,apply,bind实现

浅析JavaScript中Function对象 之 详解call&apply

JS之call/apply/bind

JS 手写之 Function.prototype.apply