临时调用call()与apply()方法

当在某个局域范围内要调用构造函数中或者其他局域范围内的方法

此时可以用到临时调用方法call与apply

虽然这两个方法都是起临时调用的功能,但是用法不一样

call(obj,val)

obj:对象名,构造函数用指代this;  val:指代属性值

apply(obj,arr)

obj:对象名,构造函数用指代this;  arr:属性值的数组

 

实例一:

function SuperType(name){
  this.name = name;
}

function SubType(){
  //    SuperType.call(this,"Lucy");    //临时调用构造函数SuperType里面的name属性
  SuperType.apply(this,["Lucy"]);  
  this.age = 19;
}

var instance = new SubType();
alert(instance.name);   //Lucy



//但是有些场合只能用特定的方法,不能互换

实例二:

取数组中最大值:

function isMax(arr){return Math.max.apply(null,arr)}

var nums = isMax([2,3,4,5,6]);

alert(nums);   //6



//在涉及到临时调用数组Array、对象Object以及调用其他类型方法时

  var a = {"0":"a","1":"b",length:2};

 1.利用字符串连接

  var b = Array.prototype.join.call(a,"+"); //临时调用数组a的方法  a+b

  2.利用函数方法

  var c = Array.prototype.map.call(a,function(key,val){

    return key.toUpperCase();  

  });   //[A,B]

  计算hash数组长度

  function cacuObjLen(obj){

     var len = 0;
     foreach(var property in obj){

        if(Object.prototype.hasOwnProperty.call(obj,property)){  //临时调用对象方法,判断hash数组是否有对应的属性

            len++;

        }

     }

     return len;

  }

  

原文地址:https://www.cnblogs.com/laoniaofly/p/5946386.html