【Infragistics教程】在javascript構造函數中創建基本繼承

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

【下載Infragistics Ultimate最新版本】

用javascript創建對象有四種方法。具體如下:

  1. 對象作為文本
  2. 構造函數調用模式
  3. 創建()方法
  4. 在ES6之后使用類

繼承的實現因對象創建方法而異。本文將解釋如何在函數構造函數之間創建繼承。

假設您有一個函數:

1

2

3

4

function animal(name, age) {

????this.name = name;

????this.age = age;

}

如果使用new操作符調用animal函數,將創建一個對象。這種對象創建方式也稱為“構造函數調用模式”。

1

2

3

4

var dog =?new animal('foo', 5);

console.log(dog);

var cat =?new animal('koo', 3);

console.log(cat);

對象dog和cat都有自己的名稱和年齡屬性。如果希望在所有對象之間共享屬性或方法,請將其添加到函數原型中。

1

2

3

4

animal.prototype.canRun =?function () {

??

????console.log('yes ' +?this.name +?' can run !');

}

使用javascript原型鏈,dog和cat對象都可以訪問canrun方法。

1

2

3

4

5

var dog =?new animal('foo', 5);

dog.canRun();?// yes foo can run

?

var cat =?new animal('koo', 3);

cat.canRun();?// yes koo can run

接下來,讓我們創建另一個構造函數——人:

1

2

3

4

5

6

7

8

function human(name, age, money) {

????this.name = name ;

????this.age = age ;

????this.money = money;

}

human.prototype.canEarn =?function () {

????console.log('yes ' +?this.name +?'can earn');

}

此時,人與動物的功能沒有任何關系。然而,我們知道人也是動物。人工構造有兩個問題。

  1. 它有重復的名稱和年齡初始化代碼。為此,應使用動物建造師。
  2. 它與動物建造師沒有任何聯系

上述兩個問題可以通過在動物和人類功能構建者之間創建繼承來消除。

您可以通過如下修改人工函數來解決代碼復制的問題1:

1

2

3

4

function human(name, age, money) {

????animal.call(this, name, age);

????this.money = money;

}

現在,在人類函數中,我們使用call方法手動傳遞當前對象作為動物函數中“this”的值。這種方法也稱為間接調用模式。現在,可以創建一個人類對象實例,如下所示:

1

2

var h1 =?new human('dj', 30,?'2000 $');

console.log(h1);

到目前為止,我們已經解決了代碼復制的第一個問題,但是人類的功能仍然與動物的功能無關。如果您嘗試對h1對象調用canrun方法,javascript將向您拋出一個錯誤。

1

h1.canRun();?// throw error canRun is not a function

您可以通過將人類功能原型與動物功能構造函數原型鏈接來解決這個問題。有兩種方法可以做到這一點。

使用γ原型

使用object.create()方法

您可以使用object.create()鏈接函數構造函數的原型,如下所示:

1

human.prototype = Object.create(animal.prototype);

您可以使用_uu proto_uuu鏈接函數構造函數的原型,如下所示:

1

human.prototype.__proto__ = animal.prototype;

更推薦object.create()方法,因為在許多瀏覽器中可能不支持_uuProto。在鏈接原型之后,在一種方式下,您已經在動物和人類函數構造函數之間創建了繼承。人的對象實例可以讀取動物功能的所有屬性,并且可以執行動物功能方法。

下面列出了實現函數構造函數之間繼承的完整源代碼,供您參考:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

function animal(name, age) {

??

????this.name = name;

????this.age = age;

??

}

??

animal.prototype.canRun =?function () {

??

????console.log('yes ' +?this.name +?' can run !');

}

??

var dog =?new animal('foo', 5);

dog.canRun();

??

var cat =?new animal('koo', 3);

cat.canRun();

function human(name, age, money) {

????animal.call(this, name, age);

????this.money = money;

}

??

human.prototype = Object.create(animal.prototype);

??

human.prototype.canEarn =?function () {

????console.log('yes ' +?this.name +?'can earn');

}

// human.prototype.__proto__ = animal.prototype;

var h1 =?new human('dj', 30,?'2000 $');

h1.canRun();

h1.canEarn();

要在函數構造函數之間創建繼承,請始終執行以下兩個操作:

  1. 使用call或apply調用父構造函數。
  2. 將子構造函數原型鏈接到父構造函數原型

轉載于:https://my.oschina.net/u/4009527/blog/2995846

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537224.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python爬蟲ssl錯誤_Python爬蟲:Requests的SSLError:certificate verify failed問題解決方案6條...

問題:腳本是用Python寫的,用到開源庫play-scraper,調用其collectionAPI來獲取Google Play的Top App列表。該庫使用了requests作為客戶端來對Google Play進行操作。當腳本執行時,會報如下錯誤:certificate verify faile…

2019年1月3日

數組 字面量創建數組 1. var arr[]; []里邊可以放數字,字符串,true,false,null,undefined,數組([1,2,3]),對象{x:1,y:2} var arr[1,2…

vertex 3.0 與SpringBoot混合開發之初探

SpringBoot是最近幾年比較流行的web應用開發框架,它是微服務的一個開發框架。它的Web服務器內核為Tomcat或Jetty,它們作為Servlet容量來對客戶端的http/https請求進行解析。最近,spring.io又出推出一套新的服務器內核框架,它就是W…

switch芯片和phy芯片的區別_感應式芯片卡CPU卡的FM1208-9和FM1208-10有什么區別,你知道嗎?...

感應式CPU卡是目前芯片卡中安全系統較高的芯片,使用范圍也較為廣泛,但是這款CPU分為FM1208-9和FM1208-10,那你們知道分別代表什么意思呢?他們之間有什么不同呢?CPU白卡FM是什么?首先,我們來說下…

每次登陸都要滑動驗證_湖人隊冠軍成員卡魯索很吃香:每次談判都有N支球隊點名要他...

10月24日NBA直播臺訊:洛杉磯湖人隊助理教練邁克-彭伯西在接受媒體采訪時透露,湖人隊替補控球后衛卡魯索目前在聯盟中很吃香。湖人隊每次進行交易談判時,對方球隊都點名想要卡魯索。彭伯西表示:“每一次我們在休賽期或者交易截止日…

[HAOI2015]按位或

樸素的 f[S]表示S到(1<<n)的期望次數 發現1的個數只增加不減少 所以可以類似拓撲序的圖&#xff0c;然后枚舉子集O(3^n)轉移 沒有優化的余地 另辟蹊徑&#xff1a; 拆開每一位來看 t[i]表示第i位變成1的次數 ansE(max(t[i])) 根據min-max容斥 得到&#xff1a;ans∑E(t[i…

MySQL在DOS指令里面的使用以及增刪改查的使用

本人的第一條博客&#xff0c;選中我的電腦單機右鍵&#xff0c;點開管理&#xff0c;選中服務找到MySQL57.啟動該服務。回退至桌面&#xff0c;按住winR 輸入cmd打開DOS指令的窗口。 在窗口輸入: mysql -h localhost -u root -p 顯示password輸入提示&#xff1a;表示已經…

node+socket.io 實現一個聊天室

我們只做簡單的實現&#xff0c;不接入數據庫&#xff0c;nodejs也不使用express和koa等框架 因此依賴只有兩個&#xff1a; 1、socket.io 2、mime&#xff08;用于獲取靜態資源時獲取文件的mime類型&#xff09; 安裝命令&#xff1a; npm install socket.io mime --save 其他…

安卓應用用戶數據_用戶指標數據應用

一、如何理解數據用戶數據&#xff1a;gender:性別、 birthday:出生日期行為數據&#xff1a;user_id:用戶id、auction_id:購買行為編號、buy_mount:購買數量、day:購買時間商品數據&#xff1a;cat_id:商品種類ID、cat1:商品類別、property:商品屬性二、用戶數據指標1.用戶數據…

三大數據庫數據庫端口號及連接jdbc驅動下載

Jdbc連接三大數據庫&#xff08;mysql sqlserver oracle&#xff09; Mysql:端口號為&#xff1a;3306&#xff08;默認&#xff09; 用java連接mysql數據庫 Try{Class.forName(“com.mysql.jdbc.Driver”); //DatabaseName:需要連接的數據庫名稱 String url”jdbc:mysql://12…

webgis從基礎到開發實踐_開源WebGIS教程系列——11.1 GISLite 的開發背景與設計

地理信息門戶可以幫助人們更容易地發現、訪問和使用地理空間信息&#xff0c; 是地理信息發布、服務和共享的重要環節。許多國家都很重視地理信息門戶的 建設&#xff0c;把它作為國家空間數據基礎設施(spatial data infrastructure&#xff0c;SDI)的重要組成部分。GISLite 是…

Oracle數據庫及在DOS命令下面的簡單操作

在Oracle數據庫注釋用--表明為注釋&#xff0c;但以下用//或--代表解釋;數據庫不怎么區分大小寫&#xff1b; 先說說一些簡單Oracle數據庫操作的語句&#xff1a; 使用語句創建普通用戶&#xff1a; Create user username identified by password; //創建普通用戶 Grant reso…

CSS屬性(display)

1.display屬性 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>08display屬性</title><style>.c1 {background-color: red;/*display: none; !* 讓其在頁面上不顯示 *!*//*display: i…

產品發布系統_【產品發布】第3期|閥門遙控系統

更多精彩&#xff0c;請點擊上方藍字關注我們&#xff01;常熟瑞特電氣股份有限公司的閥門遙控系統是一款經典的產品線&#xff0c;包括了全系列的液壓執行器&#xff0c;電液執行器&#xff0c;微型動力單元&#xff0c;液壓動力泵站&#xff0c;液壓電磁閥箱等產品。閥門遙控…

大數據就業前景,分析的太到位了

大數據廣泛應用于電網運行、經營管理及優質服務等各大領域&#xff0c;并正在改變著各行各業&#xff0c;也引領了大數據人才的變革。大數據就業前景怎么樣&#xff1f;這對于在就業迷途中的我們是一個很重要的信息。 隨著大數據時代的到來【這次國家教育部也改革動真格了】&am…

常用集合(List,Set,Map)的基本定義和操作

集合類存放于java.util包中。 集合類存放的都是對象的引用&#xff0c;而非對象本身&#xff0c;出于表達上的便利&#xff0c;我們稱集合中的對象就是指集合中對象的引用&#xff08;reference)。 常用的集合類型主要有3種&#xff1a;set(集&#xff09;、list(列表&#x…

多麥克風做拾音的波束_麥克風丨人聲應該用動圈話筒還是電容話筒?

無論是在您最喜歡的樂隊的紀錄片中&#xff0c;還是在電影中那些有關錄音棚里的場景中&#xff0c;似乎都存在著一個共同的主題&#xff0c;那就是&#xff1a;歌手們都在使用大振膜的電容麥克風進行錄音。我知道人們應該從別人的經驗中汲取精華&#xff0c;事半功倍。但是我并…

MYSQL安裝與庫的基本操作

mysql數據庫 什么是數據庫 # 用來存儲數據的倉庫 # 數據庫可以在硬盤及內存中存儲數據 數據庫與文件存儲數據區別 數據庫本質也是通過文件來存儲數據, 數據庫的概念就是系統的管理存儲數據的文件 數據庫介紹 數據庫服務器端: 存放數據的主機集群數據庫端: 可以連接數據庫的任意…

java框架mybatis配置文件總結一

先新建個java EE的項目 該配置文件必須在src的目錄下面&#xff0c; 新建一個xml 文件&#xff1a; 建完后發現它會自動建在web目錄下面&#xff0c;我們把這個文件移到src目錄下面&#xff1a; &#xff08;注&#xff1a;對了&#xff0c;該文件的編碼最好用utf-8的no bom,…

python第六周實驗_第六周實驗四

二.實驗的內容(1)根據下面的要求實現圓類Circle。1.圓類Circle的成員變量&#xff1a;radius表示圓的半徑。2.圓類Circle的方法成員&#xff1a;Circle():構造方法&#xff0c;將半徑置0Circle(double r)&#xff1a;構造方法&#xff0c;創建Circle對象時將半徑初始化為rdoubl…