一直對call 和apply很模糊,今天終於搞懂了,分享出來給你們。前端
var ZS = {web
name:"張三",canvas
sex : "男",數組
age : "25歲",前端工程師
say :function(){app
console.log(this.name+","+this.sex+",今年"+this.age)函數
}this
}
spa
var LS = {it
name:"李四",
sex : "女",
age : "28歲"
}
ZS.say(); // 張三,男,今年25歲
張三有個say 方法,能夠console個人我的信息 。
如何用張三的say方法顯示李四的我的信息呢?
ZS.say.apply(LS); // 李四,女,今年28歲
ZS.say.call(LS); // 李四,女,今年28歲
ZS.say.bind(LS)(); // 李四,女,今年28歲
!注意 張三並無把say給李四,李四根本沒有say方法。
若是直接寫xw.say.bind(xh)是不會有任何結果的,看到區別了嗎?
call和apply都是對函數的直接調用,而bind方法返回的仍然是一個函數,所以後面還須要()來進行調用才能夠。
var WW = {
name:"王五",
sex : "男",
age : "30歲",
say :function(company,position){
console.log(this.name+","+this.sex+",今年"+this.age+",目前就任於"+company+",職位是:"+position);
}
}
var ZL = {
name:"趙六",
sex : "女",
age : "33歲"
}
WW.say("阿里","web前端工程師"); //王五,男,今年30歲,目前就任於阿里, 職位是:web前端工程師
經過call和apply讓趙六也能夠用這個say方法
WW.say.call(ZL,"百度","canvas工程師"); // 趙六,女,今年33歲,目前就任於百度,職位是:canvas工程師(call後面的參數與say方法中是一一對應的);
WW.say.call(ZL,"百度",["百度","canvas工程師"]); // 趙六,女,今年33歲,目前就任於百度,職位是:canvas工程師(apply的第二個參數是一個數組,數組中的元素是和say方法中一一對應的)