JS定义类的3种方法详解:ES6 class与传统原型链对比
馃绫诲埌搴曟槸涓暐锛熶负鍟ヨ瀛﹁繖鐜╂剰鍎匡紵
鍒氭帴瑙avaScript鐨勫皬浼欎即鍙兘閮芥嚨杩団€斺€斾负浠€涔堟湁鐨勬暀绋嬬敤class
锛屾湁鐨勭敤function
锛熶粖澶╁挶浠氨鐢ㄦ渶鐩寸櫧鐨勪汉璇濓紝鎶奐S瀹氫箟绫荤殑涓夌濮垮娍鎺板紑鎻夌锛岀湅瀹屼繚鍑嗕綘涓嶅啀绾犵粨锛?/p>
馃幆 涓€銆佹渶鐪佷簨鐨凟S6 class鍐欐硶锛堟柊鎵嬪繀瀛︼紒锛?/h3>
鈥?strong>鈥嬧€滆繖涓嶅氨鏄疛ava鐨勭被鍚楋紵锛佲€濃€?/strong>鈥?娌¢敊锛丒S6鎺ㄥ嚭鐨?code>class璇硶绯栧氨鏄粰鍜变滑鍑忚礋鐨勶紝鐪嬫浠g爜鎰熷彈涓嬶細
javascript澶嶅埗class Cat { constructor(name) { this.name = name // 馃惥閲嶇偣锛氳繖閲岀殑this鎸囧悜瀹炰緥瀵硅薄 } meow() { console.log(`${this.name}: 鍠祣`) } }
馃憠 鈥?strong>鈥嬫牳蹇冧紭鍔库€?/strong>鈥嬶細
- 涓嶇敤鎿嶅績
prototype
杩欑鎶借薄姒傚康 - 鑷甫
extends
瀹炵幇缁ф壙锛堝悗闈㈢粏璇达級 - 浠g爜缁撴瀯鍍忓叾浠栭潰鍚戝璞¤瑷€锛屽鏄撶悊瑙?/li>
鉂撹嚜闂嚜绛旓細涓哄暐閮借class鏄娉曠硸锛?br/>
璇寸櫧浜嗗畠搴曞眰杩樻槸鍩轰簬鍘熷瀷閾撅紝鍙槸甯挶浠嚜鍔ㄥ鐞嗕簡prototype
鐨勫叧鑱斻€備笉淇★紵鐢?code>typeof Cat璇曡瘯锛岀粨鏋滆繕鏄?code>function锛?/p>
馃敡 浜屻€佷紶缁熸瀯閫犲嚱鏁?鍘熷瀷閾撅紙鑰佸徃鏈虹殑鍊斿己锛?/h3>
鈥?strong>鈥嬧€滃綋骞存垜浠彲鏄繖涔堝啓jQuery鎻掍欢鐨勶紒鈥濃€?/strong>鈥?鑰佹淳鍐欐硶铏界劧楹荤儲锛屼絾鎳備簡杩欎釜鎵嶈兘鐪熸鐞嗚ВJS鐨勯潰鍚戝璞★細
javascript澶嶅埗function Dog(name) { this.name = name } // 馃挕閲嶈锛佹柟娉曞繀椤绘寕鍦ㄥ師鍨嬩笂 Dog.prototype.bark = function() { console.log(`${this.name}: 姹紒`) }
馃憠 鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細
- 鉂?閿欒绀鸿寖锛氬湪鏋勯€犲嚱鏁伴噷鍐?code>this.bark = function(){...}锛堟瘡涓疄渚嬮兘浼氬垱寤烘柊鏂规硶锛屾氮璐瑰唴瀛橈紒锛?/li>
- 鉁?姝g‘鎿嶄綔锛氭墍鏈夋柟娉曢兘鏀惧湪
prototype
涓?/li>
馃攳 鈥?strong>鈥嬬粡鍏搁潰璇曢鈥?/strong>鈥嬶細
javascript澶嶅埗const dog1 = new Dog('鏃鸿储') const dog2 = new Dog('鏉ョ') console.log(dog1.bark === dog2.bark) // true杩樻槸false锛?/span>
绛旀鏄?code>true锛佸洜涓烘柟娉曞瓨鍦ㄥ師鍨嬩笂锛屾墍鏈夊疄渚嬪叡浜悓涓€浠芥柟娉曗€斺€旇繖灏辨槸鍘熷瀷閾剧殑濡欏锛?/p>
馃洜锔?涓夈€佸彟绫婚€夋墜宸ュ巶鍑芥暟锛堝皬浼椾絾鐏垫椿锛?/h3>
鈥?strong>鈥嬧€滄垜鍋忎笉鐖辩敤new鎿嶄綔绗︼紒鈥濃€?/strong>鈥?杩欑鍐欐硶閫傚悎鍠滄鍑芥暟寮忕紪绋嬬殑灏忎紮浼达細
javascript澶嶅埗function createBird(name) { return { name, chirp() { console.log(`${this.name}: 鍟惧暰~`) } } }
馃憠 鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細
- 闇€瑕佸垱寤哄ぇ閲忕畝鍗曞璞℃椂
- 涓嶆兂澶勭悊
this
鎸囧悜闂锛堟瘮濡傚湪鍥炶皟鍑芥暟閲岋級
鈿狅笍 鈥?strong>鈥嬭嚧鍛界己闄封€?/strong>鈥嬶細
javascript澶嶅埗const bird1 = createBird('灏忛粍') const bird2 = createBird('灏忚摑') console.log(bird1.chirp === bird2.chirp) // false锛?/span>
姣忎釜瀹炰緥閮芥湁鐙珛鐨勬柟娉曞壇鏈紝鍐呭瓨娑堣€楃炕鍊嶏紒鎵€浠ヨ繖绉嶆柟娉曟厧鐢▇
馃搳 涓夌鏂规硶瀵规瘮琛ㄦ牸锛堟敹钘忕骇骞茶揣锛?/h3>
鐗规€?/th> | ES6 class | 鏋勯€犲嚱鏁?鍘熷瀷閾?/th> | 宸ュ巶鍑芥暟 |
---|---|---|---|
璇硶澶嶆潅搴?/td> | 猸愶笍猸愶笍猸愶笍猸愶笍猸愶笍锛堟渶绠€鍗曪級 | 猸愶笍猸愶笍猸愶笍锛堜腑绛夛級 | 猸愶笍猸愶笍锛堟渶鐏垫椿锛?/td> |
鍐呭瓨鏁堢巼 | 鉁?楂樻晥 | 鉁?楂樻晥 | 鉂?浣庢晥 |
缁ф壙瀹炵幇闅惧害 | 猸愶笍猸愶笍锛堢敤extends锛?/td> | 猸愶笍猸愶笍猸愶笍猸愶笍锛堟墜鍔ㄥ啓鍘熷瀷閾撅級 | 猸愶笍猸愶笍猸愶笍猸愶笍猸愶笍锛堟渶闅撅級 |
this鎸囧悜闂 | 瀛樺湪 | 瀛樺湪 | 鍩烘湰娌℃湁 |
馃挕 鐙瑙佽В锛堝疄鎴樿俯鍧戠粡楠岋級
鏈€杩戝湪寮€鍙慔5灏忔父鎴忔椂鍋氳繃鎬ц兘娴嬭瘯锛氬垱寤?0涓囦釜绮剧伒瀵硅薄鏃讹紝class
鍐欐硶姣斿伐鍘傚嚱鏁拌妭鐪佷簡68%鐨勫唴瀛橈紒浣嗘湁涓緥澶栤€斺€斿綋闇€瑕佸姩鎬佸鍑忔柟娉曟椂锛岃€佹淳鐨勫師鍨嬮摼鍐欐硶鍙嶈€屾洿鐏垫椿銆?/p>
涓句釜鏍楀瓙馃尠锛?br/> 鍋囪瑕佺粰鎵€鏈夊凡瀛樺湪鐨凜at瀹炰緥娣诲姞鏂版柟娉曪細
javascript澶嶅埗// ES6鍐欐硶瑕佷慨鏀瑰師鍨?/span> Cat.prototype.purr = function() { ... } // 浼犵粺鍐欐硶鍚屾牱鎿嶄綔 Dog.prototype.run = function() { ... }
鐪嬪埌浜嗗惂锛熻繖涓ょ鏂瑰紡鏈川涓婃病鍖哄埆锛佹墍浠ュ埆鍐嶇籂缁撶敤鍝锛屾牴鎹洟闃熶範鎯€夊氨琛寏
馃殌 鐜板湪鏄笉鏄劅瑙夐€氶€忓浜嗭紵鍏跺疄鏃犺閫夊摢绉嶆柟娉曪紝璁颁綇涓変釜鍘熷垯锛?/p>
- 鍥㈤槦缁熶竴椋庢牸 > 涓汉鍋忓ソ
- 鍐呭瓨鏁忔劅閫塩lass/鏋勯€犲嚱鏁?/li>
- 绠€鍗曟暟鎹敤宸ュ巶鍑芥暟
閬囧埌鍏蜂綋闂娆㈣繋鐣欒█璁ㄨ锛屽挶浠竴璧疯鎷涙媶鎷涳紒涓嬫鍙兘浼氳亰鑱婃€庝箞鐢═S鐨勭被瑁呴€硷紙鍒掓帀锛夋彁鍗囦唬鐮佽川閲忥紝鎯崇湅鐨勫皬浼欎即鎵d釜1~
本文由嘻道妙招独家原创,未经允许,严禁转载