JS原型繼承與類的繼承

来源:http://www.cnblogs.com/huaxili/archive/2016/04/07/5362941.html
-Advertisement-
Play Games

我們可以試驗一下,JS類的繼承 children.constructor==father 返回的是true,而原型繼承children.constructor==father 返回的是false; ...


  1.   我們先看JS類的繼承

 

  1.  1 <!DOCTYPE html>
     2 <html>
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6         <title>JS類的繼承</title>
     7 </head>
     8 
     9 <body>
    10     /* -- 類式繼承 -- */
    11     <script type="text/javascript">
    12     //先聲明一個超類
    13     var Animal = function(name) {
    14             this.name = name;
    15         }
    16         //給這個超類的原型對象上添加方法
    17     Animal.prototype.Eat = function() {
    18         console.log(this.name + " Eat");
    19     };
    20     //實例化這個超
    21     var a = new Animal("Animal");
    22 
    23     //再創建構造函數對象類
    24     var Cat = function(name, sex) {
    25             //這個類中要調用超類Animal的構造函數,並將參數name傳給它
    26             Animal.call(this, name);
    27             this.sex = sex;
    28         }
    29         //這個子類的原型對象等於超類的實例
    30     Cat.prototype = new Animal();
    31     //因為子類的原型對象等於超類的實例,所以prototype.constructor這個方法也等於超類構造函數
    32 
    33     console.log(Cat.prototype.constructor);
    34     //這個是Animal超類的引用,所以要從新賦值為自己本身
    35     Cat.prototype.constructor = Cat;
    36     console.log(Cat.prototype.constructor);
    37     //子類本身添加了getSex 方法
    38     Cat.prototype.getSex = function() {
    39             return this.sex;
    40         }
    41         //實例化這個子類
    42     var _m = new Cat('cat', 'male');
    43     //自身的方法
    44     console.log(_m.getSex()); //male
    45     //繼承超類的方法
    46     console.log(_m.Eat()); //cat
    47     </script>
    48 </body>
    49 
    50 </html>

     

  2.   我們再看JS原型繼承
     1 <!DOCTYPE html>
     2 <html>
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>JS原型繼承</title>
     7 </head>
     8 
     9 <body>
    10     <!--原型繼承-->
    11     <script type="text/javascript">
    12     //clone()函數用來創建新的類Person對象
    13     var clone = function(obj) {
    14         var _f = function() {};
    15         //這句是原型式繼承最核心的地方,函數的原型對象為對象字面量
    16         _f.prototype = obj;
    17         return new _f;
    18     }
    19 
    20     //先聲明一個對象字面量
    21     var Animal = {
    22             somthing: 'apple',
    23             eat: function() {
    24                 console.log("eat " + this.somthing);
    25             }
    26         }
    27         //不需要定義一個Person的子類,只要執行一次克隆即可
    28     var Cat = clone(Animal);
    29     //可以直接獲得Person提供的預設值,也可以添加或者修改屬性和方法
    30     console.log(Cat.eat());
    31     Cat.somthing = 'orange';
    32     console.log(Cat.eat());
    33 
    34     //聲明子類,執行一次克隆即可
    35     var Someone = clone(Cat);
    36     </script>
    37 </body>
    38 
    39 </html>

     

  3. 我們可以試驗一下,JS類的繼承 children.constructor==father 返回的是true,而原型繼承children.constructor==father 返回的是false;


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

-Advertisement-
Play Games
更多相關文章
  • 協同過濾常常被用於分辨某位特定顧客可能感興趣的東西,這些結論來自於對其他相似顧客對哪些產品感興趣的分析。協同過濾以其出色的速度和健壯性,在全球互聯網領域炙手可熱。 ...
  • 1.Behaviour介紹 Erlang/Elixir的Behaviour類似於其它語言中的介面(interfaces),本質就是在指定behaviours的模塊中強制要求導出一些指定的函數,否則編譯時會warning。 其中Elixir中使用到behaviour的典範就是GenServer, Ge ...
  • 一、php環境配置: 二、zendstudio Eclipse +xdebug 開發php環境軟體下載: 三、安裝配置如下: extension=php_xdebugvc6.dll [Xdebug] xdebug.profiler_enable=on xdebug.trace_output_dir= ...
  • 現在記錄下Gridview的相關內容,也是強迫症犯了,Yii2自帶的Gridview雖然不錯,但是過濾欄如果一些欄位用不著,不會自動合併成一行,當然也可以過濾欄不用,而是在最上方自己寫一些需要檢索的數據,但是這樣很麻煩,還要自己去規劃樣式,寫檢索什麼的。正好在搜索將檢索欄和標題合併時,看到了kart ...
  • 一、IDE介紹 ① 什麼是IDE? 1、 IDE全稱是”Integrated Development Environment”,中文稱為“集成開發環境”; 2、是用於提供程式開發環境的應用程式,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面工具。就是集成了代碼編寫功能、分析功能、編譯功能、調試功能 ...
  • 一.攔截器與過濾器的區別: 1.filter基於回調函數,我們需要實現的filter介面中doFilter方法就是回調函數,而interceptor則基於Java本身的反射機制,這是兩者最本質的區別。 2.filter是依賴於servlet容器的,即只能在servlet容器中執行,很顯然沒有serv ...
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體【新錄針對本系統的視頻教程,手把手教開發一個模塊,快速掌握本系統】A 集成代碼生成器(開發利器); 技術:313596790 增刪改查的處理類,ser ...
  • 適配器模式(Adapter) 適配器模式有兩種形式:類的適配器模式和對象的適配器模式。 一、類的適配器模式 類圖 描述 類的適配器模式: Target,目標介面,可以是具體的或抽象的類,也可以是介面; Adaptee,需要適配的類; Adapter,適配器類,把源介面轉換成目標介面;Adapter類 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...