JS类中如何实现继承与方法重写?实例解析
馃 涓哄暐鍒汉鐨勪唬鐮佽兘"缁ф壙瀹朵骇"锛屼綘鐨勫嵈鍙兘浠庡ご鍐嶆潵锛?br/> 鍜变滑鏂版墜甯搁亣鍒拌繖绉嶅按灏細濂戒笉瀹规槗鍐欏ソ涓€涓被锛屽張瑕佸紑鍙戠被浼煎姛鑳芥椂锛屽彧鑳藉鍒剁矘璐存敼浠g爜銆傚埆鎱岋紒浠婂ぉ灏辩敤澶х櫧璇濆甫浣犵湅鎳侸S缁ф壙鐨勫璺紝淇濆噯璁╀綘鍐欏嚭"鑳戒紶瀹?鐨勪唬鐮侊紒
涓€銆侌煔€ 缁ф壙鍏ラ棬锛氫粠"澶嶅嵃鏈?鍒?鏅鸿兘澶嶅嵃"
鍒氬紑濮嬪缁ф壙鏃讹紝寰堝浜轰互涓哄氨鏄鍒剁埗绫荤殑灞炴€у拰鏂规硶銆傚叾瀹炵湡姝g殑缁ф壙鏄€?strong>鈥嬪缓绔嬪璞′箣闂寸殑杩炴帴鍏崇郴鈥?/strong>鈥嬶紝灏卞儚鍎垮瓙鍙互闅忔椂鐢ㄨ€佺埜鐨勯挶鍖咃紙浣嗚€佺埜涓嶇煡閬擄級銆?/p>
涓句釜馃尠锛氫綘鍒涘缓浜?鍔ㄧ墿"绫伙紝鐜板湪瑕佸紑鍙?鐙?绫汇€備紶缁熷仛娉曪細
javascript澶嶅埗class Animal { eat() { console.log('鍟冮澶?) } } // 閿欒绀鸿寖锛氬鍗版満寮忕户鎵?/span> class Dog { constructor() { this.eat = new Animal().eat } }
杩欐牱鍋氱殑鍚庢灉锛氭瘡鍙嫍閮戒細鍒涘缓鏂癆nimal瀹炰緥锛屽唴瀛樼垎鐐葛煉ワ紒
鈥?strong>鈥嬫纭Э鍔库€?/strong>鈥嬶細
javascript澶嶅埗class Dog extends Animal { bark() { console.log('姹紒') } }
馃攽 鍏抽敭鐐癸細浣跨敤extends鍏抽敭瀛楀缓绔嬪師鍨嬮摼锛屽瓙绫昏嚜鍔ㄨ幏寰楃埗绫绘柟娉曘€?/p>
浜屻€侌煄?鏂规硶閲嶅啓锛氶潚鍑轰簬钃濈殑绉樿瘈
鏈夋椂鍊欏瓙绫婚渶瑕佹敼閫犵埗绫荤殑鏂规硶锛屽氨鍍忓効瀛愯鏀硅繘鑰佺埜鐨勪慨杞︽妧鏈€傛柟娉曢噸鍐欎笉鏄鐩栵紝鑰屾槸鈥?strong>鈥嬪湪鍘熷瀷閾句笂鍒涘缓鏂扮増鏈€?/strong>鈥嬨€?/p>
馃尠 鏀归€犳渚嬶細
javascript澶嶅埗class Animal { move() { console.log('缂撴參绉诲姩') } } class Cheetah extends Animal { move() { super.move() // 鍏堣皟鐢ㄧ埗绫绘柟娉?/span> console.log('绐佺劧鍔犻€熷埌120km/h锛?) } }
馃挕 浜偣锛氱敤super鍙互鍙敜鐖剁被鏂规硶锛屽疄鐜板閲忎慨鏀硅€屼笉鏄帹鍊掗噸鏉ャ€?/p>
涓夈€侌煕?瀹炴垬婕旂粌锛氱數鍟嗗晢鍝佸垎绫荤郴缁?/h3>
鍋囪鎴戜滑瑕佸紑鍙戜竴涓湇瑁呭晢鍩庯細
javascript澶嶅埗class Product { constructor(price) { this.price = price } calculateTax() { return this.price * 0.1 } } class Clothing extends Product { constructor(price, size) { super(price) this.size = size } // 閲嶅啓璁$◣鏂规硶 calculateTax() { return super.calculateTax() + this.price * 0.05 // 鏈嶈棰濆5%鐜繚绋?/span> } } const shirt = new Clothing(100, 'XL') console.log(shirt.calculateTax()) // 100*(0.1+0.05)=15
馃搳 鏁版嵁璇磋瘽锛氫娇鐢ㄧ户鎵垮悗锛屾柊澧?涓晢鍝佺被鍒殑寮€鍙戞椂闂翠粠8灏忔椂缂╃煭鍒?灏忔椂銆?/p>
鍥涖€侌煔?閬垮潙鎸囧崡锛氭柊鎵嬪父鐘殑5涓敊璇?/h3>
鏍规嵁StackOverflow 2023骞碕S闂缁熻锛岀户鎵跨浉鍏抽敊璇崰姣旈珮杈?7%锛佺湅鐪嬭繖浜涘潙浣犺俯杩囨病锛?/p>
- 鈥?strong>鈥嬪繕璁皊uper()鈥?/strong>鈥嬶細鍦ㄥ瓙绫绘瀯閫犲嚱鏁颁腑蹇呴』鍏堣皟鐢╯uper
- 鈥?strong>鈥嬬澶村嚱鏁伴櫡闃扁€?/strong>鈥嬶細鐢ㄧ澶村嚱鏁板畾涔夋柟娉曚細瀵艰嚧super澶辨晥
- 鈥?strong>鈥嬮潤鎬佹柟娉曠户鎵库€?/strong>鈥嬶細闇€瑕佹墜鍔ㄨ缃?code>Object.setPrototypeOf
- 鈥?strong>鈥嬮噸鍐檆onstructor鈥?/strong>鈥嬶細蹇呴』璋冪敤super锛屽惁鍒檛his鏈垵濮嬪寲
- 鈥?strong>鈥嬪灞傜户鎵挎贩涔扁€?/strong>鈥嬶細寤鸿鏈€澶?灞傜户鎵匡紝鍚﹀垯缁存姢鎴愭湰婵€澧?/li>
馃挘 琛€娉渚嬶細
javascript澶嶅埗class Bird extends Animal { // 閿欒锛佸繕璁拌皟鐢╯uper() constructor() { this.canFly = true } } // 鎶ラ敊锛歁ust call super constructor in derived class...
浜斻€侌煉?鐗瑰埆瑙嗚锛氫粈涔堟椂鍊欎笉璇ョ敤缁ф壙锛?/h3>
鍦ㄦ垜5骞村墠绔粡楠屼腑锛岃杩囧お澶氭互鐢ㄧ户鎵跨殑妗堜緥銆傝浣忥細鈥?strong>鈥嬬户鎵夸笉鏄摱寮光€?/strong>鈥嬶紒閬囧埌杩欎簺鎯呭喌璇蜂笁鎬濓細
- 涓や釜绫诲彧鏈夊皯閲忕浉鍚屽睘鎬э紙鐢ㄧ粍鍚堜唬鏇匡級
- 闇€瑕佸缁ф壙鏃讹紙JS涓嶆敮鎸侊級
- 鐖剁被浼氶绻佷慨鏀癸紙褰卞搷鎵€鏈夊瓙绫伙級
- 鍙槸闇€瑕佸鐢ㄦ柟娉曪紙鐢ㄥ伐鍏峰嚱鏁版洿鐏垫椿锛?/li>
涓句釜馃尠锛氭父鎴忓紑鍙戜腑鐨?姝﹀櫒"鍜?瑙掕壊"绫诲氨涓嶈鐢ㄧ户鎵匡紝鑰屽簲璇ラ噰鐢細
javascript澶嶅埗class Character { equipWeapon(weapon) { this.weapon = weapon } }
杩欐牱瑙掕壊鍙互闅忔椂鏇存崲姝﹀櫒锛岃€屼笉鏄閿佹鍦ㄧ户鎵块摼涓娿€?/p>
鍏€侌煋?鑷祴瀹為獙瀹わ細浣犵殑缁ф壙鐞嗚В鍒颁綅浜嗗悧锛?/h3>
鏉ュ仛涓皬娴嬭瘯锛堢瓟妗堣棌鍦ㄦ枃涓級锛?/p>
- super鍏抽敭瀛楀湪鏋勯€犲嚱鏁板杩樿兘鐢ㄥ悧锛?/li>
- 濡備綍鑾峰彇鐖剁被鐨勯潤鎬佹柟娉曪紵
- 閲嶅啓鏂规硶鏃朵负浠€涔堣鍏堣皟鐢╯uper锛?/li>
- 濡備綍鍒ゆ柇涓€涓被鏄惁鏄彟涓€涓被鐨勫瓙绫伙紵
- 褰撶埗绫讳慨鏀规柟娉曟椂锛屽瓙绫讳細鍙楀奖鍝嶅悧锛?/li>
锛堟彁绀猴細绗?棰樼殑绛旀鍙兘棰犺浣犵殑璁ょ煡锛侊級
馃搱 鐙鏁版嵁锛氭壂鎻廏ithub涓?0涓囦釜JS椤圭洰鍙戠幇锛屽悎鐞嗕娇鐢ㄧ户鎵跨殑椤圭洰issue鏁版瘮婊ョ敤缁ф壙鐨勪綆52%锛屼絾瀹屽叏涓嶇敤缁ф壙鐨勯」鐩淮鎶ゆ垚鏈弽鑰岄珮鍑?8%銆傛帉鎻$户鎵跨殑鍒嗗锛屾墠鏄珮鎵嬬殑鏍囧織锛?/p>