JS中的繼承方式總結

来源:http://www.cnblogs.com/s-qiu/archive/2017/06/27/7087521.html
-Advertisement-
Play Games

1. 原型鏈繼承 Child.prototype = new Parent(); 2. call(thisObj, param1, param2,...) 3. apply(thisObj, [param1,param2,...]) 4. 組合繼承(call+原型鏈 / apply+原型鏈) 5.寄 ...


1. 原型鏈繼承

Child.prototype = new Parent();

 1 function Parent (name, age) {
 2     this.name = name;
 3     this.age = age;
 4 }
 5 Parent.prototype.say = function(){
 6     console.log('hello, my name is ' + this.name);
 7 };
 8 function Child() {
 9 }
10 Child.prototype = new Parent('pursue');
11 var child1 = new Child();
12 child1.say(); //hello, my name is pursue
13 var child2 = new Child();
14 console.log(child1.say === child2.say);//true
15 console.log(child1.name === child2.name);//true

 

2. call(thisObj, param1, param2,...)

 1 function Parent(username){
 2     this.username = username;
 3     this.hello = function(){
 4       alert(this.username);
 5     }
 6   }
 7   function Child(username,password){
 8     Parent.call(this,username);
 9     this.password = password;
10     this.world = function(){
11       alert(this.password);
12     }
13   }
14   var parent = new Parent("zhangsan");
15   var child = new Child("lisi","123456");
16   parent.hello();
17   child.hello();
18   child.world();

3. apply(thisObj, [param1,param2,...])

 1 function Parent(username){
 2     this.username = username;
 3     this.hello = function(){
 4       alert(this.username);
 5     }
 6   }
 7   function Child(username,password){
 8     Parent.apply(this,new Array(username));
 9     this.password = password;
10     this.world = function(){
11       alert(this.password);
12     }
13   }
14   var parent = new Parent("zhangsan");
15   var child = new Child("lisi","123456");
16   parent.hello();
17   child.hello();
18   child.world();

 

4. 組合繼承(call+原型鏈 / apply+原型鏈)

 1 function Parent(hello){
 2     this.hello = hello;
 3   }
 4   Parent.prototype.sayHello = function(){
 5     alert(this.hello);
 6   }
 7   function Child(hello,world){
 8     Parent.call(this,hello);//利用 call 方法 將父類的屬性繼承過來
 9     //Parent.apply(this,new Array(hello));//利用 apply 方法 將父類的屬性繼承過來
10     this.world = world;//新增一些屬性
11   }
12   Child.prototype = new Parent();//將父類的方法繼承過來
13   Child.prototype.sayWorld = function(){//新增一些方法
14     alert(this.world);
15   }
16   var c = new Child("zhangsan","lisi");
17   c.sayHello();
18   c.sayWorld();

 

5.寄生組合繼承,與4相似,只是將原型鏈換做了Object.create(Parent.prototype)

 1 function Parent(hello){
 2     this.hello = hello;
 3   }
 4   Parent.prototype.sayHello = function(){
 5     alert(this.hello);
 6   }
 7   function Child(hello,world){
 8     Parent.call(this,hello);//利用 call 方法 將父類的屬性繼承過來
 9     //Parent.apply(this,new Array(hello));//利用 apply 方法 將父類的屬性繼承過來
10     this.world = world;//新增一些屬性
11   }
12   Child.prototype = Object.create(Parent.prototype);//將父類的方法繼承過來
13   Child.prototype.sayWorld = function(){//新增一些方法
14     alert(this.world);
15   }
16   var c = new Child("zhangsan","lisi");
17   c.sayHello();
18   c.sayWorld();

 


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

-Advertisement-
Play Games
更多相關文章
  • 1,TextInput組件介紹 TextInput 組件除了作為輸入框實現基本的輸入功能外,它還提供了許多其他功能,比如自動校驗、占位符以及指定彈出不同的鍵盤類型等。 2,組件的屬性 (1)autoCapitalize:首字母自動大寫。可選值有:none、sentences、words、charac ...
  • 恢復內容開始 今天咱們來說一下,CSS中的3D效果 .如果你把transform真的掌握的和純熟的話,就可以直接通過CSS做出很多很炫酷的效果,甚至.輪播圖和選項卡都可以通過CSS來做,咱們明天就說如何運用CSS來做輪播圖,大家記得看哦! 很好,話不多說,翠花'上代碼': 圖片沒有的話就其他的代替哦 ...
  • 前面的話 大部分的時候,作為前端,我們在寫 CSS 樣式之前,需要添加一份 reset.css 。CSS reset不僅用於清除預設樣式,更是一種全局樣式定義。如果項目前期不定製好CSS reset,後期維護階段再對其進行修改,將會牽一發而動全身。本文將詳細介紹CSS reset reset 以網易 ...
  • 現在的樣式,看起來簡單,但裡面深奧的東西太多,套路太多,還是自己不夠聰明呀!!! ...
  • if 函數的實現步驟: function +名字() 指定id , 指定開關(display: none or block) if + else 構成邏輯 控制開關 決定在哪裡安置一個燈泡, 指定一個id給某個標簽 把開關用電線連著燈泡, 安裝開關 #+id名稱{ 屬性1= 賦值, 屬性 2 = 賦... ...
  • 沒有什麼不能用一張圖來解決。 ...
  • 在今天之前,我沒有很系統的看過,學習過vue。也是第一次嘗試用vue寫個小應用 現在開始研究配環境 這邊參考的是https://cn.vuejs.org/v2/guide/installation.html#%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7 ...
  • 說點小案例angular的排序 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...