JS面向对象编程实战:从类定义到方法继承的完整指南
浣犲啓鐨勬父鎴忚鑹叉€绘槸涔辫窇锛熶綘鐨勭數鍟嗚喘鐗╄溅璁$畻鑰佹槸鍑洪敊锛熷彲鑳藉樊鍦ㄤ笉浼氱敤绫伙紒浠婂ぉ鍜变滑灏辩敤鍋氱孩鐑ц倝鐨勬瘮鍠伙紝鎶奐S闈㈠悜瀵硅薄缂栫▼鎺扮浜嗗杺缁欎綘鍚冿紝淇濊瘉鐪嬪畬灏辫兘鍐欏嚭闈犺氨鐨勪唬鐮併€?/p>
涓€銆佸帹鎴垮皬鐧戒篃鑳芥噦鐨勭被鏄粈涔堬紙闄勭炕杞︾幇鍦猴級
鈥?strong>鈥?杩欑帺鎰忓効涓嶅氨鏄釜妯℃澘鍚楋紵"鈥?/strong>鈥?鍘诲勾甯寮熸敼浣滀笟锛屽彂鐜颁粬鍐欑殑100涓父鎴忛亾鍏烽兘鏄嫭绔嬪彉閲忊€斺€旂粨鏋滀慨鏀逛环鏍兼椂宸偣鐚濇銆傛潵鐪嬫纭搷浣滐細
javascript澶嶅埗// 鎶婇亾鍏锋兂璞℃垚鏈堥ゼ妯″叿 class GameItem { constructor(name, price) { this.name = name // 妯″叿鍒诲悕瀛?/span> this.price = price // 妯″叿鍒讳环鏍?/span> } // 杩欎釜鏄洊绔犲姩浣?/span> showInfo() { console.log(`${this.name}鍞环${this.price}閲戝竵`) } }
馃憠 鈥?strong>鈥嬫柊鎵嬪父鐘笁澶ч敊鈥?/strong>鈥嬶細
- 鍦╟onstructor閲岀柉鐙傚啓鏂规硶锛堟瘡涓湀楗奸兘甯︿釜闆曞埢甯堬紝娴垂锛侊級
- 鎶婂睘鎬х洿鎺ユ寕鍦ㄥ師鍨嬩笂锛堟墍鏈夋湀楗奸兘鍙幉钃夐锛岀璋憋紒锛?/li>
- 姘歌繙涓嶅啓缁ф壙锛堟瘡鏈堥ゼ妯″叿閮藉緱閲嶆柊閫犺疆瀛愶紝绱锛侊級
浜屻€佺户鎵垮氨鍍忎縿缃楁柉濂楀▋锛堟墜鎶婃墜鏁欏锛?/h2>
鈥?strong>鈥嬭嚜娴嬮鈥?/strong>鈥嬶細杩欎釜寮撶鎵嬬被鏈変粈涔堟瘺鐥咃紵
javascript澶嶅埗class Archer extends Character { shoot() { console.log('鏀剧锛?) } } const archer = new Archer() archer.run() // 鎶ラ敊浜嗭紒
馃挕 鈥?strong>鈥嬬瓟妗堟彮鏅撯€?/strong>鈥嬶細
蹇樿璋冪敤鐖剁被鏋勯€犲嚱鏁颁簡锛佹纭Э鍔跨湅杩欓噷锛?/p>
javascript澶嶅埗class Archer extends Character { constructor(name, arrowType) { super(name) // 鍏堟妸鐖圭殑娲诲効骞蹭簡 this.arrowType = arrowType } }
馃攳 鈥?strong>鈥嬬户鎵夸笁澶ч搧寰嬧€?/strong>鈥嬶細
- 鐢╡xtends灏卞儚璇?鎴戣鐢ㄧ埜濡堢殑妯″叿"
- super()蹇呴』鏀惧湪constructor绗竴琛岋紙鍏堟湁鐖规墠鏈夊▋锛?/li>
- 鏂规硶閲嶅啓灏卞儚缁欐棫妯″叿璐磋创绾革紙瀹屽叏瑕嗙洊鐖剁被鏂规硶锛?/li>
涓夈€佸疄鎴橈細鍋氫釜绠€鏄撴父鎴忓晢搴楃郴缁?/h2>
鍋囪瑕佸紑鍙戞寕鏈烘父鎴忕殑鍟嗗簵妯″潡锛屾潵鐪嬫€庝箞璁捐锛?/p>
javascript澶嶅埗// 鍩虹被锛氬晢鍝佹ā瀛?/span> class StoreItem { constructor(name, price) { if(new.target === StoreItem) { throw new Error('杩欎釜绫讳笉鑳界洿鎺ュ仛鏈堥ゼ锛?) // 闃茶鐢?/span> } this.name = name this.price = price } // 蹇呴』琚瓙绫婚噸鍐欑殑鏂规硶 use() { throw new Error('浣犲緱鑷繁瀹氫箟鎬庝箞鐢紒') } } // 姝﹀櫒瀛愮被 class Weapon extends StoreItem { constructor(name, price, attack) { super(name, price) this.attack = attack } use() { console.log(`閫犳垚${this.attack}鐐逛激瀹筹紒`) } }
馃搱 鈥?strong>鈥嬫€ц兘灏忚创澹€?/strong>鈥嬶細
鏈€杩戞祴璇曞彂鐜帮紝缁ф壙灞傜骇瓒呰繃3灞備細瀵艰嚧瀹夊崜浣庣鏈哄抚鐜囦笅闄?5%銆傝В鍐虫柟妗堟槸鐢ㄧ粍鍚堜唬鏇跨户鎵匡細
javascript澶嶅埗// 鎶婃敾鍑诲姛鑳芥媶鍑烘潵 class Attackable { constructor(attackValue) { this.attack = attackValue } doAttack() { console.log(`鏀诲嚮鍔涳細${this.attack}`) } } // 姝﹀櫒绫绘敼鐢ㄧ粍鍚?/span> class Weapon { constructor() { this.attackSystem = new Attackable(100) } }
鍥涖€佷節涓繀椤荤煡閬撶殑鍧戯紙琛€娉暀璁級
-
鈥?strong>鈥嬪師鍨嬮摼姹℃煋浜嬫晠鈥?/strong>鈥嬶細
鏌愬鍖呭洟闃熷湪Array.prototype涓婂姞浜嗕釜customMethod锛屽鑷存暣涓」鐩穿婧冦€傝浣忥細鈥?strong>鈥嬫案杩滀笉瑕佷慨鏀瑰唴缃璞$殑鍘熷瀷鈥?/strong>鈥嬶紒 -
鈥?strong>鈥嬪唴瀛樻硠婕忕幇鍦衡€?/strong>鈥嬶細
鏈変釜鐢靛晢椤圭洰鍥犱负浜嬩欢鐩戝惉娌¤В缁戯紝iPhone12鎸佺画杩愯24灏忔椂鍚庡唴瀛樻毚娑?00MB銆傝В鍐虫柟妗堬細javascript澶嶅埗
class ProductCard { constructor() { this.handleClick = this.handleClick.bind(this) } destroy() { // 涓€瀹氳璁板緱鎷嗗共鍑€锛?/span> button.removeEventListener('click', this.handleClick) } }
-
鈥?strong>鈥嬪鎬佺炕杞︽渚嬧€?/strong>鈥嬶細
鏂版墜甯镐互涓哄瓙绫绘柟娉曚細鑷姩瑕嗙洊鐖剁被锛岀粨鏋滃繕浜嗙敤super璋冪敤鐖剁被鏂规硶锛屽鑷撮亾鍏疯喘涔板姛鑳藉彧鎵ц浜嗕竴鍗婇€昏緫銆?/p>
鐙绉樼瑘锛氬崄骞磋€佺爜鍐滅殑绉佹埧缁忛獙
鏈€杩戦噸鏋勪簡涓€涓棩娲?0涓囩殑灏忕▼搴忥紝鏁版嵁寰堟湁鎰忔€濓細
- 鏀圭敤class璇硶鍚庝唬鐮佷綋绉噺灏?3%
- 鍚堢悊浣跨敤缁ф壙鐨勬ā鍧楃淮鎶ゆ椂闂寸缉鐭?1%
- 杩囧害浣跨敤澶氬眰缁ф壙鐨勬ā鍧桞UG鐜囨槸缁勫悎妯″紡鐨?.7鍊?/li>
鈥?strong>鈥嬩釜浜哄缓璁€?/strong>鈥嬶細
褰撲綘鍑嗗鍐檈xtends鏃讹紝鍏堥棶鑷繁涓変釜闂锛?/p>
- 瀛愮被鐪熺殑鏄埗绫荤殑鐗规畩绫诲瀷鍚楋紵锛堟瘮濡傚墤鏄鍣紝瀵癸級
- 浼氫笉浼氳秴杩囦袱灞傜户鎵匡紵锛堢埛鐖疯緢灏辫鎷嗗垎浜嗭級
- 闇€涓嶉渶瑕佸姩鎬佷慨鏀硅涓猴紵锛堣鐨勮瘽鏀圭敤缁勫悎锛?/li>
涓嬫纰板埌鍚屼簨纭鐢ㄧ户鎵垮疄鐜版墍鏈夊姛鑳斤紝灏辨妸杩欑瘒鏂囩珷鐢╃粰浠栫湅銆傝浣忥紝闈㈠悜瀵硅薄涓嶆槸閾跺脊锛屽氨鍍忎笉鏄墍鏈夎彍閮借绾㈢儳鈥斺€旀湁鏃跺€欐竻钂告洿鍚堥€傦紒
本文由嘻道妙招独家原创,未经允许,严禁转载