call和apply用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34255080/article/details/79062917

一直都知道call和apply,用的真的很少,今天想起来了,就随便说说吧

1:基本用法

看到call和apply,大家想到的应该都是一句话 改变对象执行的上下文

2:apply和call的用法

其实call和apply的用意简单来说都一样,就是改变this 的指向
这也是他们的相同点
下面看一个具体的demo
var person = {
    name: 'xiao ming',
    age: 18,
    who: function () {
        console.log( 'my name is ' + this.name + ' , ' + this.age + ' years old' );
        console.log( person === this);
    }
}
person.who();
person.who.apply({name:'123',age:15});
person.who.call({name:'123',age:15});
person.who.call({name:'123'})

这样person的指向就改变了


3:apply和call的不同

先看下apply和call 的用法

call 

function.call(obj[,arg1[, arg2[, [,.argN]]]]])

apply

function.apply(obj[,argArray])

可以看出,它们里面传入的参数不同。

那到底什么时候该用apply,什么时候用call呢

根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call,当要传入多个对象时,用apply

4:apply和call其他用法

function superClass () {
    this.a = 1;
    this.print = function () {
        console.log(this.a);
    }
}

function subClass () {
    superClass.call(this);
    this.print();
}

用call实现继承,subClass通过call实现对superClass 的继承。

本文参考:https://www.jianshu.com/p/131ce0390cf8




猜你喜欢

转载自blog.csdn.net/qq_34255080/article/details/79062917