美文网首页
JavaScript的apply和call区别

JavaScript的apply和call区别

作者: kim_jin | 来源:发表于2018-09-11 11:43 被阅读0次

Function.prototype.call或是Function.prototype.apply都是非常非常常用的方法,他们的作用也是一样的,区别就在于传入的参数是不一样的。
apply接受两个参数,第一个参数指定了函数体内部的this对象的指向,第二个参数是一个带下标的集合,这个集合可以是数组也可以是类数组,apply方法把这个集合中的元素做为参数传递给调用的函数。

var func = function ( a , b , c ){
    alert([ a , b , c ])  // [1 , 2 , 3]
}
func.apply(null , [1 , 2 , 3])

call传瑞的参数的数量是不固定的,和apply相同,第一个参数代表函数体内部的this的指向,从第二个参数开始,每一个参数会依次的传入函数中。
call是包装在apply上面的语法糖,如果我们明确的知道函数接受多少个参数,还是应该选择实参和形参一一对应。
当我们使用call和apply的时候,我们第一个传入的参数是null,函数体的this会指向默认的宿主对象,在浏览器中就是window

call和apply的用途

1.改变this的指向

var obj1 ={
  name : 'kim'
}
var obj2 = {
  name :'john'
}
window.name = 'window';
var getName = function(){
  console.log(this.name);
}
getName(); //window
getName.call(obj1); // kim
getName.apply(obj2); //john

借用其他对象的方法

‘借用构造函数’,实现类似继承的效果

var A = function(name){
  this.name = name
};
var B = function(){
  A.apply(this ,arguments);
}
B.prototype.getName  = function(){
  return this.name;
};
var b  = new B('kim');
console.log(b.getName()); //kim

相关文章

网友评论

      本文标题:JavaScript的apply和call区别

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