怎样明白javascript的call和apply

网上关于call和apply的诠释已异常多了,然则觉得看完以后,还不是迥殊明白其作用。

关于call、apply最直接的明白就是继续。
我们在面向对象编程的时刻,经常会如许写:

function People(name){
    this.name = name
}
 
People.prototype={
    food:"fish",
    say: function(){
        console.log("My Name is "+ this.name +",I love "+this.food);
    }
}
var people = new People('www.ghugo.com');
people.say();

以上代码应当很好明白,这时候假如我们有一个对象:

hugo2 = {food : "bone"}

我们不想对它从新定义say要领,那末我们能够经由过程call或apply用People的say要领:

people.say.call(hugo2,'hugo');

也就相称因而如许挪用:

hugo2.say() //伪代码,仅作为代码明白用

运用call,也就能够把上面的代码等价于下面的代码:

hugo2 = {
    food : "bone",
    say: function(){
    console.log("My Name is "+ this.name +",I love "+this.food);
    }
}
 
hugo2.say();

能够看出函数挪用的三种体式格局:

obj.myFunc();
myFunc.call(obj,arg);
myFunc.apply(obj,[arg1,arg2..]);

用浅显的话总结一下:就是用他人的东西,所以要call一下

别的,apply和call另有一个作用是转变this的指向,这个网上已大把诠释了,自行google一下吧。说太多反而不好明白。

    原文作者:WebLovers_new
    原文地址: https://segmentfault.com/a/1190000004275901
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞