亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

直接用o.add(5,7)不就好了?為什么要用add.call(o,5,7)??

http://img1.sycdn.imooc.com//589535840001684a11120621.jpg

如圖,都把我看蒙了

正在回答

2 回答

因為o對象的本身是沒有定義add方法的,在這個案例中,add()方法定義在window上,所以就算你在外面add(5,7),這樣去執行,其實還是在window對象上調用的add,相當于window.add(5,7);只是window上調用方法和屬性的時候,前面的window可以默認不用寫而已。

這就存在一個問題,o對象內部是沒有add方法的,但是我想讓它借用window對象的這個方法去實現我要的功能怎么辦呢?這個時候就要用到call和apply。具體操作就是老師講的:需要調用的函數名.call(需要調用這個方法的對象,參數1,參數2,...,參數N);其本質說白了就是將這個方法強拉硬拽地拖到o對象上,假裝是o名義下的方法去為o對象服務和工作。

那這樣有啥好處呢?好處就是方便重用和繼承,這個后面OOP的章節肯定會講。每當你定義一個函數,其實是在內存里開辟了一塊空間來存放這個函數對象的,哪怕這兩個函數每個字都一樣,也是兩個不同的對象,如果外部有了一個add函數,你為了讓它能執行o對象里面的方法,又在o對象里在寫一個o.add;那么無疑是很費內存的,也不方便維護,項目小沒啥說法,項目大了維護起來簡直是辣眼睛。。。

15 回復 有任何疑惑可以回復我~

哈哈,因為o只有兩個屬性:a和b,沒有add方法!

3 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

直接用o.add(5,7)不就好了?為什么要用add.call(o,5,7)??

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號