关于call()

作者: fenerchen | 来源:发表于2018-01-16 20:23 被阅读4次

JavaScript中的call方法call(object,a1,a2,,,),有两个作用:
1、继承
2、修改函数运行时的this指针

一、继承

function a(){
  this.x=1;
}
function b(){
  console.log(this);
  a.call(this);
  console.log(this);
}
var bb=new b()

上述代码输出

 b {}
 b {x: 1}

说明 a.call(this);中的this代指b,b把a中定义的属性又走了一遍,相当于继承了a。

二、修改函数运行时的指针

var each=function(arr,fn){
  let i=0,len=arr.length;
  for(;i<len;i++){
    fn(i,arr[i]);
  }
}
each([1,2,3],function(){
  console.log(this.toString())
})

输出3次[object Window]。因为,在function中没有定义函数的作用域,输出的this表示window对象。

var each=function(arr,fn){
  let i=0,len=arr.length;
  for(;i<len;i++){
    fn.call(arr[i]);
  }
}
each([1,2,3],function(){
  console.log(this.toString())
})

输出1 2 3。说明 fn.call(arr[i],i,arr[i]);将fn方法放到arr[i]
作用域中执行,输出的this表示arr[i].

总结:a.call(this),this所指的作用域继承a,a.call(b)把a的作用域放在b作用域下执行,也就是a.this=b

apply(object,数组)。apply和call的不同之处在于第二个参数是数组。apply的一个妙用是,可以将数组转换成参数列表。
例如,Math.max(num1,num2,...)得用参数列表,很麻烦,用apply可以直接写成数组,便解决这个麻烦

console.log(Math.max.apply(null,[2,4,5]))//输出5

相关文章

  • 关于call()

    JavaScript中的call方法call(object,a1,a2,,,),有两个作用:1、继承2、修改函数运...

  • 如何手写一个call方法

    call方法简介 关于call() 方法的介绍,可以参照这里[https://developer.mozilla....

  • 关于 this_原型链_继承 相关问题总结

    关于this 1- apply、call 、bind的作用和区别 apply、call 、bind都有改变thi...

  • this

    关于This【不懂this是因为不用call】【放应杭 this】f.call(asthis,input1,inp...

  • Jquery

    关于This【不懂this是因为不用call】【放应杭 this】f.call(asthis,input1,inp...

  • Js的call和apply以及ES5、ES6的继承

    call方法 MDN关于call方法的解释 call() 方法调用一个函数, 其具有一个指定的this值和分别地提...

  • 2016.4.23

    1.关于Retrofit2踩过的坑:1.1 Call对象实例Call对象,需要注意的是Call对象实例只能被调用一...

  • js回调函数

    关于call和apply,call和apply的作用,完全一样,唯一的区别就是在参数上面。 call接收的参数不固...

  • 探索call、apply、bind以及它们的区别

    参考:【优雅代码】深入浅出 妙用Javascript中apply、call、bind 我查询了许多关于call、a...

  • 关于this,call,bind

    记录一个错了N遍的知识点 var a = { user:"lxc", fn:function(){ con...

网友评论

    本文标题:关于call()

    本文链接:https://www.haomeiwen.com/subject/cfseoxtx.html