用javascript來生產一部iPhone8

其實要談談javascript的對象鏈。

唐納德.川普 當選美國第四十五任總統。當選以后,川普立即給蒂姆.庫克打電話
川普(Trump):“我說廚子啊,我是美國總統,我現在命令你把在中國的apple工廠搬回美國,iPhone8就在國內生產,好兌現我對廣大藍領選民的承諾啊”.
庫克(Cook):“呵呵,這是一個鵝妹子嚶的建議嗷,but no”.建在中國的工廠是搬不回來了。

開個玩笑算是開場白。經過幾天的理解,發現javascript的對象
鏈居然和現代企業的生產鏈居然十分的相似。字面都帶鏈啊。這里就借apple的iPhone8的生產來理解js的對象鏈??赡懿皇鞘仲N切。但是在一定程度上能幫你理解相關概念。

要學習js功,必先自宮,如不自宮,必不成功。 如果你帶著java,C++,php的對象原理來學習js的對象繼承,會撞得滿頭包,尤其是看到和其他語言一樣的關鍵字時,千萬不能拿老概念來套。js自成體系,所以學習js的對象鏈要理解其自身的特點。我先擺出來。1js中是沒有類這個抽象概念的,js中都是對象。2 js對象繼承實際發生的是一種“委托關系”。這種委托關系是js的對象鏈的精華所在。

這個“委托關系”聽著耳熟嗎?什么?不熟。那么聽過OEM么?什么?也沒有聽過OEM。好吧知道富士康么?什么?沒聽過?同學火星冬天冷嗎?
好吧,OEM就是代工工廠。這流程就是一個公司擅長設計,但是他不生產產品,他委托另一個擅長制造的工廠生產產品。另一個工廠又會把其中一部分生產過程委托 給其他工廠,這個委托關系可以一直持續下去。如果理解js對象繼承鏈的人立刻會知道我說的原理。沒有理解也沒有關系,下面就借著iPhone8的生產來看看這個委托關系。

我們把這個過程稍微簡化一下,要不全過程寫完我也沒有那個能力,寫全過程要找郭明池來寫。

我把ip8的生產簡化為:
1.硬件設計
2.軟件設計
3.初試
4. 整機生產
5. 電池生產
6. 屏幕生產
7. 外設生產

下面會用一些偽代碼來說明這個問題。js中都是對象,沒有類。類都是實體,是在內存中實際存在的。在整個生產中的公司都是對象?,F在我們看看這些對象

    //蘋果公司對象   
  class Apple {
        init(){  //初始化apple公司
             founder:"Steve Jobs";
             current leader:"Tim Cook";
             Designer:"Ivy";
             Location :"South. CA"
         }
         
         programSoftware(){  //軟件制作和設計
             return (" make ios11");
         }

         designHardware(){ //硬件原型設計
            (" make ios11");  
            (" make  protype of ip8");
            ("design cpu of a11 ");
   
      }

         legalGroup(){  //法務部 負責和華為打官司
           ("lawsuit with huawei")
        }               
   }

//這就在javascript里面給apple公司建立了一個對象,整個對象有初始化的屬性, 還有三個自己擅長的方法。

話說2007年,喬布斯還在世的時候,他找到富士康公司老板郭臺銘說:”我說臺銘啊,我想找個工廠生產手機,以前富士康生產的imac不錯,這才還是委托你們來生產吧“ 。郭臺銘是:好吧。我馬上建立富士康蘋果手機工廠。為了好理解我加了命名空間,看見了么_。2017年,Apple推出iphone 10周年了,又要開始生產了。

 //FskApple這個對象就是Apple的繼承者,他本身是一個對象,并不是實例化出來的
//FskApple和Apple盡管用了extends關鍵字,但是他們沒有從屬關系,僅僅是委托關系而已
  FskApple extends Apple (){
       init(){  //fsk的初始化屬性
          founder:"郭臺銘";
          location:"鄭州";            
       }
       
         makeHardware(){ //硬件生產    
           (" make  module ip8");     //生產模具,這是fsk的特長
          (" Assemble ip8");     //組裝iphone8,這也是fsk的特長     
 
        }


 }

富士康并不精通屏幕生產,所以富士康有把屏幕的生產委托給了LG公司.LG公司要給蘋果生產最新的AMOLED屏幕。這里和實際的委托有出入只是為了好理解. 好么又一個工廠出來了。富士康LG工廠。

   //LG富士康工廠又受fsk的委托生產
     LgFsk extends FskApple (){
      init(){  //LgFsk的初始化屬性
         founder:"unknow";
         location:"seoul";            
      }
      
        makeScreen(){ //屏幕   
          (" make circuit");     //生產背板電路
         (" make panel");     //生產面板     

       }


}
 ```

實際的生產的委托關系比這個復雜的多,js的對象鏈也比這個復雜一點。我在這里把它簡化為一條線的委托關系只是為了好理解。

三個對象的`委托鏈`建成以后,就可以投入生產了。富士康公司要調用ip8的設計方法時,他并不要自己去創建這個方法,因為他不擅長這個方法,他直接利用和蘋果公司的委托關系借用蘋果公司的設計方法就可以了。 蘋果是委托富士康來生產,從整個產業鏈來說也可以認為是富士康委托蘋果公司做了設計工作。蘋果不生產,富士康不設計,但是一旦兩者產生委托關系以后,兩者可以發揮各自的特長,2017年iPhone8就在這個委托鏈中生產出來了。

現代企業想改變這么一個發揮各自優勢的鏈時多么的不容易,再也找不到更好的方法了。所以庫克說蘋果工廠再也回不去了。
     
為此我畫了一張圖,比較丑,湊活著看吧。這里就是三個對象之間的繼承關系。我覺得叫連接關系比較好一點。

![screenshot_20.png](http://upload-images.jianshu.io/upload_images/2044710-3d40a51a813a002b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/600)
原理如此,三個對象有繼承關系,但是之間并不是從屬關系。對象都具有自己擅長的方法,其他對象的方法也不活再費力去做一個獨立的副本。lg要設計方法可以找富士康,富士康沒有的話又可以找蘋果。

我們去掉細節來看,js的對象繼承鏈只是有些關鍵字借用了傳統的面向對象的東西,但是實際上js和java的對象是完全不同的。

###最后再強調一句:javascript中的對象繼承鏈不是對象之間的從屬關系,而是一種委托和合作關系。理解這一點后面的學習就好辦了。

初學者水平,不知道這個通俗理解是否得體和準確?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 春節回家爸媽身邊近一個月,由于擋不住記憶中那些美食的誘惑,本來就不瘦的身板像鼓風機般的膨脹起來,待春夢醒來,鏡子里...
    云兒飄過閱讀 921評論 27 31
  • 01自我反省 孔子曰:吾日三省吾身。很多人都會在錯誤發生時第一反應就是習慣性的把錯誤的原因推給別人?!安皇俏?,是他...
    兜兜轉轉z_閱讀 196評論 0 2
  • 一直就覺得自己的時間不夠用,無論怎么事先制定計劃,也都是不能按照計劃完成,買好了的書,總是不能如期看完。日復一日,...
    王憶塵閱讀 924評論 4 40
  • 克服心魔、重新振作的三大秘訣: 1.放慢思考。深深的體會到快節奏思考帶來的焦慮和煩躁,很累,因為腦子一直在想東西,...
    MSXiang閱讀 126評論 0 0
  • 心有千千結,臉有千千孔?!雪n⊙第一次清理毛孔,痛到飆淚,咬著牙告訴自己這都可以忍了,孰不可忍?心和臉要經歷了多少糟...
    月野兔TT閱讀 148評論 0 1