先看代碼app
const xiaoming = { name: '小明', own: '鉛筆', zhuanbidao: function(result1, result2){console.log(`${this.name}使用了轉筆刀把${this.own}變成了${result1}和${result2}`)} }
上述代碼很簡單,小明有一隻鉛筆,有一把轉筆刀,能夠用來削鉛筆,當咱們調用this
xiaoming.zhuanbidao('削好的鉛筆', '木屑');
很明顯會獲得:小明使用了轉筆刀把鉛筆變成了削好的鉛筆和木屑code
此時有個問題,小明的同桌小華也有一隻鉛筆,可是沒有轉筆刀,可是他也須要削鉛筆,咋辦呢?io
const xiaohua = { name: '小華', own: '鉛筆' };
直接調用console
xiaohua.zhuanbidao('削好的小華的鉛筆', '小華鉛筆的木屑'); // 確定報錯
此時,小華能夠叫一下小明:‘小明哥,借個轉筆刀使使唄’,因而便有了function
xiaoming.zhuanbidao.call(xiaohua, '削好的小華的鉛筆', '小華鉛筆的木屑'); // 小華使用了轉筆刀把鉛筆變成了削好的小華的鉛筆和小華鉛筆的木屑
從上述示例不難理解,小明和小華都有各自的鉛筆,這個鉛筆能夠看做this,可是小明本身有轉筆刀,能夠直接削本身的鉛筆,可是小華沒有,他只有本身的鉛筆,因而他須要借小明的轉筆刀來削本身的鉛筆(this指向改變,變成了小華本身的鉛筆),也同樣能夠獲得本身削好的鉛筆。
最後至於call和apply的區別就只是傳參的方式不一樣而已方法
xiaoming.zhuanbidao.apply(xiaohua, ['削好的小華的鉛筆', '小華鉛筆的木屑']);
bind能夠看做只是和小明借到了轉筆刀,可是尚未開始削,要削怎麼辦?調用一下方法咯;傳參和call同樣call
xiaoming.zhuanbidao.bind(xiaohua, '削好的小華的鉛筆', '小華鉛筆的木屑')();
ok that's allapply