Js中的apply和call

1.call和apply都是为了改变某个函数运行时的上下文而存在的

2.也就是改变函数体内this的指向。

3.二者的作用完全一样,只是接受参数的方式不太一样。

4.call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里

例如:

func1 定义如下:
  var func1 = function(arg1, arg2) {};

call方式:

  func1.call(this, arg1, arg2);

apply方式

  func1.apply(this, [arg1, arg2]);

 

一个应用:

function classof(obj){
  if(obj===null){
    return "NULL"
  }
  if(obj===undefined){
    return "Undefined"
  }
  return Object.prototype.toString.call(obj).slice(8,-1)
}

通过Object.prototype.toString.call调用对象的方法,返回字符串,然后从字符串中截取出对象的真实类型

说明:

1.toString方法是object这个对象的方法,js中的每个对象都继承于object

2.object的toString方法会返回[object Object]这样的字符串,其中8到倒数第二位为类型

3.很多JS中的类都重写了toString方法,所以返回的形式就不一定是2中规定的那样了

4.利用Object.prototype.toString.call调用

posted @ 2017-04-23 22:09  413Xiaol  阅读(158)  评论(0)    收藏  举报