国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Javascript中的Trait與代碼重用

開發 前端
我們知道,OOP中最普遍的代碼重用方式是通過繼承,但是,繼承有一些缺點,其中最為主要的是繼承是一種isa關系,父子類之間的關系太過緊密,而對于像JAVA這門語言而言,只能支持單繼承,使得很多時候不能不進行代碼拷貝這樣的事情。

我們知道,OOP中最普遍的代碼重用方式是通過繼承,但是,繼承有一些缺點,其中最為主要的是繼承是一種isa關系,父子類之間的關系太過緊密,而對于像JAVA這門語言而言,只能支持單繼承,使得很多時候不能不進行代碼拷貝這樣的事情。

舉個例子,假設我們要建模動物。最底層是一個Animal對象,下面有貓科,犬科。然后貓科下有貓,老虎。犬科下有狗和狼。 貓能夠miao,狗能夠叫,老虎和狼都能夠狩獵,這個時候問題來了,由于狩獵這個特性是老虎和狼都有的,但是老虎以及從貓科繼承,狼已經從犬科繼承,它們都已經無法通過繼承來獲得狩獵這個能力了。

讓我們來看看Trait如何來解決這個問題。 Trait從表面上看和一個類很類似,有屬性和方法,但是它必須依附于一個類才能起作用。同時多個Traits可以組合成一個Trait。如果不同的 Traits中屬性或者方法有沖突的話,可以選擇重命名屬性的方法來決議沖突。如果沖突沒有決議的話,組合Traits會拋出異常。

這樣,類層次仍然像前面描述的一樣,我們把狩獵定義為一個Trait,然后在構建老虎和狼的類的時候把Trait融入進去。這樣老虎和狼就獲得了狩獵的能力了。

由于Java語言的限制,沒有一種華麗的方法來實現Trait。讓我們來看看基于原型的Javascript語言如何實現Trait。這個其實從一 個側面證明基于原型的Javascript和基于類的Java相比,對于OOP而言更加靈活和強大。為了縮減代碼的大小,這里我使用light- traits這個JS庫。因為完整實現一個Traits庫超出這篇文章的范圍。

  1. var util = require('util'); 
  2. var Trait = require('light-traits').Trait; 
  3. var expect = require('chai').expect; 
  4. var _ = require('lodash'); 
  5. function inherits(constructor, parentConstructor, trait, properties) { 
  6.   util.inherits(constructor, parentConstructor); 
  7.   if (properties !== undefined) 
  8.     _.extend(constructor.prototype, properties); 
  9.   if (trait !== undefined) 
  10.     constructor.prototype = trait.create(constructor.prototype); 
  11.  
  12. function Animal() {} 
  13. Animal.prototype = { 
  14.   isAlive: true, 
  15.   eat: function (food) { 
  16.     console.log("omnomnom, I'm eating: " + food); 
  17.   }, 
  18.   sleep: function () { 
  19.     console.log('zzzz'); 
  20.   }, 
  21.   die: function () { 
  22.     this.isAlive = false
  23.     console.log("I'm dead"); 
  24.   } 
  25. }; 
  26.  
  27. function CatFamily() {} 
  28. inherits(CatFamily, Animal); 
  29. function DogFamily() {} 
  30. inherits(DogFamily, Animal); 
  31.  
  32. var TMeow = Trait({ 
  33.   meow: function () { 
  34.     console.log('meow meow'); 
  35.   } 
  36. }); 
  37. function Cat() {} 
  38. inherits(Cat, CatFamily, TMeow); 
  39.  
  40. var cat = new Cat(); 
  41. cat.meow(); 
  42.  
  43. var TBark = Trait({ 
  44.   bark: function () { 
  45.     console.log('woof woof'); 
  46.   } 
  47. }); 
  48. function Dog() {} 
  49. inherits(Dog, DogFamily, TBark); 
  50.  
  51. var dog = new Dog(); 
  52. dog.bark(); 
  53.  
  54.  
  55. var THunt = Trait({ 
  56.   huntCount: 0, 
  57.   hunt: function () { 
  58.     console.log('looking for food', this.huntCount++, 'times'); 
  59.  
  60.   }, 
  61.   kill: function (animal) { 
  62.     animal.die(); 
  63.     console.log('I killed animal'); 
  64.   } 
  65. }); 
  66.  
  67. function Tiger() {} 
  68. inherits(Tiger, CatFamily, THunt, { 
  69.   roar: function () { 
  70.     console.log("roar...roar..."); 
  71.   } 
  72. }); 
  73.  
  74. var tiger = new Tiger(); 
  75. expect(tiger).to.be.instanceOf(CatFamily); 
  76. expect(tiger).to.have.property('hunt'); 
  77. expect(tiger).to.have.property('kill'); 
  78. expect(tiger).to.not.have.property('meow'); 
  79. expect(tiger.isAlive).to.be.equal(true); 
  80. tiger.hunt(); 
  81. tiger.eat('meat'); 
  82. tiger.roar(); 
  83.  
  84. function Wolf() {} 
  85. inherits(Wolf, DogFamily, Trait.compose(TBark, THunt)); 
  86.  
  87. var wolf = new Wolf(); 
  88. expect(wolf).to.be.instanceOf(DogFamily); 
  89. expect(wolf).to.have.property('hunt'); 
  90. expect(wolf).to.have.property('kill'); 
  91. expect(wolf).to.have.property('bark'); 
  92. expect(wolf.isAlive).to.be.equal(true); 
  93. wolf.bark(); 
  94. wolf.hunt(); 
  95. wolf.hunt(); 
  96. wolf.sleep(); 
  97. wolf.kill(cat); 
  98. expect(cat.isAlive).to.be.equal(false); 
  99. expect(wolf.huntCount).to.be.equal(2); 

原文鏈接:http://www.ituring.com.cn/article/64103

責任編輯:陳四芳 來源: 圖靈社區
相關推薦

2018-11-08 15:50:18

前端Javascript重用性

2009-09-09 14:09:35

Scala Trait

2023-05-29 13:56:00

JSReact

2024-06-13 10:11:33

WPFCommand命令模式

2017-01-10 13:37:15

PHPTrait應用

2024-01-03 08:00:00

Java軟件開發代碼

2011-07-21 13:24:14

java

2020-06-12 08:21:58

JavaScript代碼開發

2009-08-19 04:16:00

泛型代碼重用

2024-06-28 01:13:59

工具C#代碼

2020-06-02 09:06:31

VueTransition前端

2009-03-11 15:30:05

evalwithJavascript

2023-11-29 13:59:00

trait定義接口

2017-02-28 15:48:11

Scala Trait設計模式框架

2017-07-24 09:45:15

JavaScript語法代碼

2009-03-13 15:24:50

catchDisposeWCF

2023-11-23 13:07:18

代碼Golang

2010-01-25 11:37:30

2017-07-26 17:38:10

JavaScriptBabel

2023-08-29 09:00:00

JavaScript工具
點贊
收藏

51CTO技術棧公眾號

亚洲人成77777在线观看网| 亚洲欧美在线专区| 二区三区精品| 成人久久一区| 久久9热精品视频| 国产视频一区二区在线观看| 欧美日韩国产在线观看| 美女视频黄免费的亚洲男人天堂| 成人xxxx视频| 那种视频在线观看| 三级视频在线| 97成人资源| 亚洲欧美综合久久久| 成人美女在线观看| 欧美亚日韩国产aⅴ精品中极品| 亚洲欧美日韩精品久久奇米色影视| 国产精品高清免费在线观看| 国产日韩中文字幕在线| 国产欧美高清在线| 女女色综合影院| 精品毛片免费观看| 99riav一区二区三区| 欧美亚洲高清一区二区三区不卡| 最近中文字幕日韩精品| 精品无码久久久久国产| 中文字幕综合在线观看| 深夜福利视频在线观看| 精品国产午夜肉伦伦影院| 91在线精品一区二区三区| 亚洲福利影片在线| 亚州精品天堂中文字幕| 亚洲第一综合| 成人毛片免费在线观看| 九色在线免费| 国产污视频在线播放| 激情网站在线| 国产精品第一国产精品| 久久精品国产清高在天天线| 日韩欧美在线观看| 国产精品九九久久久久久久| 久久99久久久久久| 最新日韩精品| 日日摸夜夜添夜夜添亚洲女人| 欧美精品三级在线观看| 国产一区二区精品在线| 美女黄视频在线观看| 日韩视频二区| 精品福利在线导航| 久久av秘一区二区三区| 粉嫩一区二区三区| 99久久综合99久久综合网站| 亚洲偷欧美偷国内偷| 成人性生交大片免费看视频直播 | 欧美三区四区| 亚洲一级黄色| 欧美性高潮床叫视频| 97免费视频在线播放| 麻豆一区二区三区在线观看| 久久亚洲精品中文字幕| 鲁大师精品99久久久| 91亚洲一区| 多野结衣av一区| 欧美aa视频| 久久久久久影院| 99久久夜色精品国产网站| 日韩一区二区三区视频在线 | 啦啦啦在线视频免费观看高清中文 | 精品一区二区精品| 欧美大奶子在线| 在线香蕉视频| 99久久99热这里只有精品| 538在线一区二区精品国产| 久久精品一二三区| 最新中文字幕在线播放| 久久国产精品亚洲77777| 亚洲成人av片| 久草精品在线播放| 欧美毛片免费观看| 欧美一区二区三区啪啪| 毛片av免费在线观看| 欧美激情1区2区3区| 中文字幕日韩精品在线观看| 国产美女玉足交| 国产精品一区二区三区av麻| 日韩午夜在线观看视频| 18成人免费观看视频漫画| 三级影片在线观看欧美日韩一区二区 | 国产 日韩 欧美 综合 一区| 午夜视频一区在线观看| 手机在线观看国产精品| 午夜不卡影院| 国产拍欧美日韩视频二区| 日本精品久久久| 日韩人在线观看| 一本到不卡免费一区二区| 成人免费在线观看av| 日韩欧美在线字幕| 日韩欧美一区二| 国产欧美在线观看一区| 国模无码视频一区二区三区| 91亚洲大成网污www| av黄色在线网站| 国产精品国产三级在线观看| 久久综合狠狠综合久久综合88 | 欧美成人免费网站| 美女一区二区三区视频| 亚洲视频免费| 日韩视频一区二区三区在线播放| 亚洲高清精品中出| 99精品老司机免费视频| 亚欧美无遮挡hd高清在线视频 | 日韩精品诱惑一区?区三区| 国产亚洲一区二区在线观看| 欧美在线免费观看| 国产福利片在线观看| 亚洲国产精品久久人人爱| 玩弄中年熟妇正在播放| 久久精品国产成人一区二区三区| 国产日韩欧美成人| 国产成人精品一区二区三区视频 | 色综合久久悠悠| 国产98色在线| 国产精品露出视频| 国产在线无码精品| 国产专区中文字幕| 国产对白叫床清晰在线播放| 51精品在线| 嫩草国产精品入口| 很黄很黄激情成人| 国产一区欧美日韩| 亚洲欧洲另类国产综合| 在线中文字幕一区| 日韩av综合网站| 久久国产精品72免费观看| 国产精品xx| 成人av影音| 伊人激情综合| 国产成+人+日韩+欧美+亚洲| 亚洲人成精品久久久久| 91精选在线观看| 久久综合88中文色鬼| 2019国产精品视频| 国产91沈先生在线播放| 黄网站app在线观看大全免费视频| 日韩.欧美.亚洲| 蜜臀视频一区二区三区| 成人在线免费视频| 精品九九久久| 91成人影院| 成人av在线一区二区| 亚洲自拍偷拍欧美| 亚洲激情成人网| 国产精品久久av| 一区二区精品国产| 女人被爽到呻吟gif动态图下载| 懂色av一区| 精品视频黄色| 国产成人精品午夜视频免费| 亚洲国产wwwccc36天堂| 国产亚洲精品美女| 波多野结衣久草一区| 亚洲免费观看高清完整版在线观看熊| 成人的网站免费观看| 激情亚洲一区二区三区四区| 国产亚洲精品成人av久久ww| 91精品国产综合久久久久久久久| 91网站在线观看免费| 久草福利在线| 91小视频xxxx网站在线| 97国产真实伦对白精彩视频8| 爽好久久久欧美精品| 日韩精品一区二区三区色偷偷| 久久综合九色综合97婷婷| 日本在线www| 色婷婷**av毛片一区| 欧美精品激情在线观看| 欧美精品一区二区三区久久| 男人的天堂日韩| a级网站在线播放| 日韩欧美在线精品| 久久99国产精品免费| 欧美性猛交xxxx免费看| 久久精品国产精品| 精品日本一区二区三区在线观看| 在线观看成人网| 日韩不卡免费高清视频| 影音先锋日韩资源| 亚洲最新在线观看| 美日韩在线视频| 日日骚一区二区网站| 尤物视频在线观看| 波多野结衣在线一区二区| 日本亚洲视频在线| 亚洲影视资源网| 欧美激情视频一区二区三区不卡 | 亚洲国产私拍精品国模在线观看| 国产在线观看精品| 中文字幕第38页| 国产精品一区二区免费福利视频| 国产精品呻吟|