您现在的位置:首页 >> 前端 >> 内容

call()方法和apply()方法的对比介绍

时间:2018/6/7 15:09:35 点击:

  核心提示:call()方法:functionname.call(thisObject,argument1,arguement2,..)apply()方法:functionname.apply(thisObjec...

call()方法:

functionname.call(thisObject,argument1,arguement2,..)

apply()方法:

functionname.apply(thisObject,[argument1,arguement2,..])

注:thisObject指的是另一个对象的名字

定义:

call():调用一个对象的一个方法,用另一个对象替换当前对象

apply():调用一个对象的一个方法,用另一个对象替换当前对象

注:call()方法和apply()方法的作用是一样的,只是他们接收参数的方式不同。

call()、apply()的基本用法

1. 扩充函数作用域

var color=”red”; //全局变量

var o={color:"blue"};

function sayColor(){alert(color);}

sayColor();         //red

sayColor.call(o); //blue

sayColor.apply(o);  //blue

2. 实现继承:

function Animal(name){

  this.name = name;  

}

function Cat(name){

  //apply的用法

  Animal.apply(this,[name]);

  Animal.apply(this,arguments); 

  //call的用法

Animal.call(this,name);

}

var cat = new Cat(“猫”);

Console.log(cat.name);

3. 实现多重继承:

function Animal(name){

  this.name = name;  

}

function catList(name){

   This.eat=function(){

      return name+”正在吃东西”;

}

}

function titleCat(name){

  //apply的用法

  Animal.apply(this,[name]);

 catList.apply(this,[name]);   

  //call的用法

Animal.call(this,name);

catList.call(this,name);

}

var cat = new Cat(“猫”);

console.log(cat.name);

console.log(cat.eat());

4. 其他用法:

(1)找数组中的最大值:

Math.max.apply(null,[1,45,56,2,7]);

(2)合并两个数组

Var arr1=[1,34,56,4];

Var arr2=[3,3,57,98];

Array.prototype.push.apply(arr1,arr2);

Tags:CA AL LL L方 
作者:网络 来源:qq_4198376