对js中call和apply的理解(一)

2016-07-22  本文已影响265人  打不过就加入他
function People(){
}
People.prototype = {
      age: 26,
      say: function(){
        alert(this.age)
      }
}

new People().say() // 26
//如果此时有个child对象,也想使用say方法,但是我不想再b对象下在定义一个同样功能的say方法,此时call,apply就派上用场了
var child = {age: 38};
new People().say.call(child) //38

从这里可以看出,其实call或者apply都是为了动态改变this指针而出现的child本身没有say()方法,却希望使用say方法,所有使用call,将people类的指针动态指向child,从而alert自己的age参数

function a(){
  console.log(Array.prototype.slice.call(arguments));
}
a(1,2,3,4,5)   //[1, 2, 3, 4, 5]

像arguments这种类数组对象,可以调用Array的slice方法来将arguments进行分割处理(arguments是类数组对象,可以理解为[1,2,3,4,5].slice())


apply、call的不同之处

function foo(arg1,arg2){
    console.log(arg1,arg2)
}
var c = {}
foo.call(c,1,2,3)   //1,2    
foo.apply(c,[1,2,3]) //1,2

不同之处就在于call和apply的参数传入方式不同。

上一篇 下一篇

猜你喜欢

热点阅读