標籤:
一直對call 和apply很模糊,今天終於搞懂了,分享出來給大家。
apply call bind方法
var ZS = {
name:"張三",
sex : "男",
age : "25歲",
say :function(){
console.log(this.name+","+this.sex+",今年"+this.age)
}
}
var LS = {
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方法返回的仍然是一個函數,因此後面還需要()來進行調用才可以。
call 和apply的區別
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方法中一一對應的)
javascript 中的call 和apply的區別