課程
/前端開發
/JavaScript
/JavaScript深入淺出
如圖,都把我看蒙了
2017-02-04
源自:JavaScript深入淺出 6-3
正在回答
因為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;那么無疑是很費內存的,也不方便維護,項目小沒啥說法,項目大了維護起來簡直是辣眼睛。。。
哈哈,因為o只有兩個屬性:a和b,沒有add方法!
舉報
由淺入深學習JS語言特性,且解析JS常見誤區,從入門到掌握
1 回答為什么要重新定義一個typeOf函數,為什么不直接用內置的typeof呢
1 回答obj為啥能直接調用obj.toString
3 回答為什么要立即調用啊
1 回答什么時候可以直接調用this?什么時候需要把this賦值給一個變量后才能用?
1 回答為什么需要用到call函數???
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-03-07
因為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;那么無疑是很費內存的,也不方便維護,項目小沒啥說法,項目大了維護起來簡直是辣眼睛。。。
2017-02-04
哈哈,因為o只有兩個屬性:a和b,沒有add方法!