javascript --- 寄生式繼承

来源:http://www.cnblogs.com/beyond-succeed/archive/2016/09/05/5843710.html
-Advertisement-
Play Games

我們可以在創建對象的函數中直接吸收其他對象的功能,然後對其進行擴展並返回。 下麵,我們用對象表示法第一個普通對象,這是它還看不出有任何被寄生的可能性: 然後我們就用來編寫用於創建triangle對象的函數。 1. 將twoD對象克隆進一個叫做that對象,這一步可以使用我們之前所討論過的任何方法,例 ...


我們可以在創建對象的函數中直接吸收其他對象的功能,然後對其進行擴展並返回。

下麵,我們用對象表示法第一個普通對象,這是它還看不出有任何被寄生的可能性:

var twoD = {
    name: 'Anna',
    dimensions: 2
}

然後我們就用來編寫用於創建triangle對象的函數。

  1. 將twoD對象克隆進一個叫做that對象,這一步可以使用我們之前所討論過的任何方法,例如使用Object()函數或者執行全屬性拷貝。

  2. 擴展that對象,添加更多屬性。

      3. 返回that對象。

之前的object()全屬性拷貝函數:

function object(o){
    var n;
    function(){};
    F.prototype = o;
    n = new F();
    n.uber = o;
    return n;
}

triangle()對象函數;

function triangle(s, h){
    var that = object(twoD);
    that.name = 'Joke';
    that.getArea = function(){
        return this.side * this.height / 2;
    }
    that.side = s;
    that.height = h;
    return that;
}

由於triangle()只是個一般函數,不屬於構造器,所以調用她通常是不需要new操作符的。由於即使錯誤的使用了new操作符,但由於返回的是一個對象,那她也會按照預定的方式工作。

var t = triangle(5, 10);
t.dimensions;  // 3;
var t2 = new triangle(5,5);
t2.getArea(); // 12.5

A哥鎮樓:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 緣起termtalk 一切起源於我對蘑菇街termtalk開源IM系統源代碼的好奇,termtalk簡稱tt。無論如何,都應該先向tt致敬,開源實屬不易。看了一些分析tt架構的文章,感覺還不錯,說是能支持高併發高可用的。聽說有一些公司也借用了該開源代碼做產品,那tt應該還是不錯的。但是正等我去打開t ...
  • 高可用架構Keywords 分層解耦 交易系統緩存 分區一致性 資源隔離重點保障 某移動高可用架構 分渠道資源隔離部署 簡訊渠道業務處理機制 -------------------------------------------------------------------------------... ...
  • Atitit.提升 升級類庫框架後的api代碼相容性設計指南 1. 增加api直接增加,版本號在註釋上面增加1 2. 廢棄api,使用主見@dep1 3. 修改api,1 4. 修改依賴import,雅瑤增加文件模式。保持相容性。。1 5. 優先選擇同一個文件內的修改,因為文件多了不好管理了,編譯速 ...
  • Java無疑是最成功的項目之一了,而在其中學習設計模式和架構設計,無疑是最好不過了。 概念: 提供一種方法訪問容器中的各個元素,而又不暴露該對象的內部細節。 使用場景: 和容器經常在一起,我們定義了一個容器,還要提供外部訪問的方法,迭代器模式無疑是最好不過了。 迭代器模式的UML類圖: 下麵的代碼是 ...
  • 今天我們來聊聊如何跟Unity學代碼優化,準確地說,是通過學習Unity的IL2CPP技術的優化策略,應用到我們的日常邏輯開發中。 ...
  • Array對象 創建數組: 數組字面量:var arr1 = [1,2,3]; Array構造函數1:var arr2 = new Array(1,2,3); //[1,2,3] Array構造函數2:var arr3 = new Array(3); var arr3 = new Array(‘3’ ...
  • 定義和用法 push方法 可向數組的末尾添加一個或多個元素,並返回一個新的長度。 join方法 用於把數組中所有元素添加到一個指定的字元串,元素是通過指定的分隔符進行分割的。 語法 arrayObject.push(newelement1,newelement2,....,newelementX) ...
  • 有不問題的地方 還忘指點 源代碼: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...