call、apply、bind三者的区别


先构造函数
let xiaowang={ name1:"小王", age:"23", sex:"", say:function(){ console.log(this.name1+","+this.age+","+this.sex) } } let xiaohong={ name1:"小红", age:"18", sex:"" }
  调用xiaowang xiaowang.say()-----输出的是 小王,23,男

  用call方法 xiaowang.say.call(xiaohong)------输出的是 小红,18,女

  用apply方法 xiaowang.say.apply(xiaohong)------输出的是 小红,18,女

  用bind方法 bind返回的是函数所以后面加上() xiaowang.say.bind(xiaohong)()-----输出是 小红,18,女
//所以call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
  然后我们来看call和apply的区别
let xiaoming={ name1:"小明", age:"23", sex:"", say:function(school,like){ console.log(this.name1+","+this.age+","+this.sex+","+school+","+like)
        }
    }
    let xiaoli={
        name1:"小丽",
        age:"18",
        sex:""
    }
    xiaoming.say.call(xiaoli ,"吕梁学院","芒果")------输出----小丽,18,女,吕梁学院,芒果
    xiaoming.say.apply(xiaoli,["运城学院","榴莲"])----输出----小丽,18,女,运城学院,榴莲
    // call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。

 

posted @ 2019-03-06 16:07  AloneInDefeat  阅读(106)  评论(0编辑  收藏  举报