js繼承,各種繼承的優缺點(原型鏈繼承,組合繼承,寄生組合繼承)
</pre><pre name="code" class="javascript"> //1.原型鏈實現繼承 function father() { this.faName = 'father'; } father.prototype.getfaName = function() { console.log(this.faName); }; function child() { this.chName = 'child'; } child.prototype = new father(); child.prototype.constructor = child; child.prototype.getchName = function() { console.log(this.chName); }; /* 缺點:1.重寫子類的原型 等於 父類的一個例項,(父類的例項屬相變成子類的原型屬性)如果父類包含引用型別的屬性,那麼子類所有例項都會共享該屬性 (包含引用型別的*原型*屬性會被例項共享) 2.在建立子類例項時,不能向父類的建構函式傳遞引數 */ /*--------------------------------------------------------------------*/ //2.原型連繼承和借用建構函式 組合實現繼承 (組合繼承解決原型鏈繼承的引用型別原型屬性被例項共享問題) function father(name) { this.faName = 'father'; } father.prototype.getfaName = function() { console.log(this.faName); }; function child(args) { this.chName = 'child'; father.apply(this,[]); //第二次呼叫父類建構函式 } child.prototype = new father(); //第一次呼叫父類建構函式 child.prototype.constructor = child; child.prototype.getchName = function() { console.log(this.chName); }; /* 缺點:兩次呼叫父類建構函式:(第一次是在建立子類原型的時候,第二次是在子類建構函式內部) 子類繼承父類的屬性,一組在子類例項上,一組在子類原型上(在子類原型上建立不必要的多餘的屬性)(例項上的遮蔽原型上的同名屬性) 效率低 */ /*--------------------------------------------------------------------*/ //3.寄生組合繼承 /** * 建立一個擁有指定原型的物件 與Object.create()方法類似 * @param {Object} o [description] */ function object(o) { function F() {}; F.prototype = o; return new F(); } /** * 通用方法實現子類繼承父類 * @param {function} child 子類建構函式 * @param {function} father 被繼承的父類建構函式 */ function inheritPrototype(child, father) { var prototype = object(father.prototype); //建立一個指定原型的物件 prototype.constructor = child; //增強物件 child.prototype = prototype; //子類的原型等於該物件 } function father(name) { this.faName = 'father'; } father.prototype.getfaName = function() { console.log(this.faName); }; function child(args) { this.chName = 'child'; father.apply(this,[]); } inheritPrototype(child, father); //子類的原型等於new 空函式(), 而new 空函式()出來的物件的原型等於父類的原型 child.prototype.getchName = function() { console.log(this.chName); }; console.log( child.prototype.isPrototypeOf(new child()) ); //true console.log(new child() instanceof child); //true /* 優點:1.只調用一次父類的建構函式,避免了在子類原型上建立不必要的,多餘的屬性 2.原型鏈保持不變 */
相關推薦
js繼承,各種繼承的優缺點(原型鏈繼承,組合繼承,寄生組合繼承)
</pre><pre name="code" class="javascript"> //1.原型鏈實現繼承 function father() { this.faName = 'father';
JavaScript之繼承(原型鏈)
call() 的人 spa 環境 isp 而且 依賴 .html console 我們知道繼承是oo語言中不可缺少的一部分,對於JavaScript也是如此。一般的繼承有兩種方式:其一,接口繼承,只繼承方法的簽名;其二,實現繼承,繼承實際的方法。JavaScript不支
C++繼承、多型,虛成員函式(包括虛解構函式、虛複製建構函式)學習筆記
通過哺乳類派生貓、狗等學習繼承、多型中的知識點 先貼上類的程式碼 #include<iostream> enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERAMN, LAB };//犬種 class Mam
FineUIPro/Mvc/Core/JS v4.2.0 釋出了(老牌ASP.NET控制元件庫,WebForms,ASP.NET MVC,Core,JavaScript)!
還記得 10 年前那個稍微青澀的 ExtAspNet 嗎,如今她已脫胎換骨,變成了如下 4 款產品: FineUIPro:基於jQuery的經典款ASP.NET WebForms控制元件,之前的FineUI(開源版)可以直接升級到此版本。 FineUIMvc:支援ASP.NET MVC5。 Fine
JS判斷字符串長度(英文占1個字符,中文漢字占2個字符)
comment 大神 mar ews 人工 name 英文 智能 htm //計算字符串長度(英文占1個字符,中文漢字占2個字符) 方法一: String.prototype.gblen = function() { var len = 0;
js一些常用的校驗(工作中用的較多的,並附常用正則表示式)
做web的經常會遇到一些js校驗,比如身份證呀,手機號呀,郵箱呀等等,分享下我工作中遇到的這些,整理了下 /* * 校驗是否為空(null/空串) */ var checkNull = function(str){ if(str == null || str ==
通過新浪雲部署Node.js微信小程序商城(不用買域名、不用備案、不用配置https)
個數 bre rem faq 開發 mem nbsp edi home 本文檔為微信小程序商城NideShop項目的安裝部署教程(GitHub),歡迎star 一、購買新浪雲SAE 為什麽選擇SAE?免費二級域名和支持https訪問,不用備案,可用做微信小程序服務器。 S
對功能的監控,操作資訊記錄(參考:本例是對使用者的操作記錄)
package com.zc.spring.aop; import com.alibaba.fastjson.JSON; import com.zc.entity.sys.User; import com.zc.entity.sys.UserLog;
accept()函式用來告訴Qt,事件處理函式“接收”了這個事件,不要再傳遞;ignore()函式則告訴Qt,事件處理函式“忽略”了這個事件,需要繼續傳遞(看一下QWidget::mousePressEvent的實現,最為典型。如果希望忽略事件,只要呼叫父類的響應函式即可)
QEvent的accept()和ignore()一般不會用到,因為不如直接呼叫QWidget類的事件處理函式直接,而且作用是一樣的,見下面的例子。 推薦直接呼叫QWidget的事件處理函式。而不是呼叫accept()和ignore()。 只有一種情況下,必須使用呼叫accept()和ign
Mongodb 叢集加keyFile認證,Mongodb使用者管理(轉:http://blog.csdn.net/wlzjsj/article/details/61421230)
介紹 自從遠古計繩結開始,資料庫的儲存就註定了今天的地位和多樣性,Nosql的出現更是解決了現有的關係型資料庫無法解決的一些難題,對高效能,靈活度,擴充套件性,海量資料的問題。隨之而出現的高速記憶體索引資料庫、列式儲存、影象儲存等等,這篇文章主要講的是mongodb文件型資料庫,mongodb目
nodejs備忘總結(一) -- node和express安裝與配置,新建簡單專案(附安裝配置過程中遇到問題的解決方法)
安裝node 本文以安裝node_v8.9.0為例(win10環境),下載node-v8.9.0-x64.msi外掛 下載後,安裝,安裝目錄預設為C:\Program Files\nodejs 配置環境變數,系統變數->path,新增“C:\Program Files\nodejs\”
Linq 先進行分組,在進行排序(選取某一個人的最新的一條記錄)
var asd = from a in context.v_ydyl_execdrug group new { a.drug_na
mac 電腦使用360應用加固,開啟閃退(mac系統版本10.13.6和10.12.x)
應用在打包後,要用360加固,因開發使用mac下載360加固後,開啟後閃退,所以從網上查詢資料,發現大體有兩種方法; 1、開啟360加固助手----右鍵----顯示包內容----Contents----MacOS----JiaGuApp雙擊開啟,之後命令列執行一會,你的加固
warning: 遠端 HEAD 指向一個不存在的引用,無法檢出(warning: remote HEAD refers to nonexistent ref, unable to checkout)
問題描述: 最近做Android開發,採用的是Git管理程式碼,從git伺服器上獲取Contacts模組的程式碼: git clone your-git-server 提示:warning: remote HEAD refers to nonexist
Hibernate查詢,返回new物件(注意這個新定義的類要有建構函式),使用sql帶條件分頁查詢並且把結果顯示到一個物件的集裡面的解決方案
IIndexDaopackage com.ucap.netcheck.dao;import com.ucap.netcheck.combination.beans.IndexCombinationBean;import com.ucap.netcheck.common.P
2-sat問題,輸出方案,幾種方法(趙爽的論文染色解法+其完全改進版)淺析 / POJ3683
本文原創於 2014-02-12 09:26。 今複習之用,有新體會,故重新編輯。 2014-02-12 09:26: 2-sat之第二斬!昨天看了半天論文(趙爽的和俉昱的),終於看明白了!好激動有木有!終於理解了趙爽的每一句話!並且用了200+行程式碼實現,A了!具體過
動態獲取以太坊,以太經典實時價格介面,以及轉換匯率(區塊鏈)
WebRequest myWebRequest = WebRequest.Create("http://api.coindog.com/api/v1/currency/ranks"); WebResponse myWebRes
Gym - 101630L Laminar Family (樹鏈剖分維護區間出現的段數)
解題思路:先把每個查詢的距離從大到小排序,然後我們再列舉查詢,這樣就不用考慮包含的情況了,因為小的肯定可以被大的包含,因此我們就只用考慮相交的情況了,關於相交,我們用區間染色的思想,然後查詢區間出現的顏色個數即可,我這裡用的是區間查詢顏色段數。 #include<
P4949 最短距離(樹鏈剖分+樹狀陣列+基環樹)
傳送門 一箇中午啊…… 本來打算用仙人掌搞的,後來發現直接基環樹就可以了,把多出來的那條邊單獨記錄為\((dx,dy,dw)\),剩下的樹剖 然後最短路徑要麼直接樹上跑,要麼經過多出來的邊,分別討論就好了 因為這裡的樹剖只有單點修改和區間查詢,於是可以用樹狀陣列 //minamoto #include&l
101889I Imperial roads (樹鏈剖分維護邊權最大值)
題意:給你一個圖,然後Q個詢問,每個詢問,問強制要求使用某條邊的情況下的最小生成樹。 解題思路:先求最小生成樹,然後對於強制要求的邊,直接查詢樹上路徑最大值,然後減去這個最大值,再加上要求的邊的權值就是答案。 直接上樹鏈剖分即可。 #includ