鍓嶈█锛屽笇鏈涘澶у鏈夋墍甯姪銆傚鏋滃鎮ㄦ湁涓€鐐瑰府鍔╋紝璇风偣璧炪€佽瘎璁哄拰杞彂銆傚鏋滃ぇ瀹舵湁浠€涔堥棶棰樻垨鑰呯枒鎯戯紝涔熷彲浠ュ湪璇勮鍖虹暀瑷€銆傛垜浼氬敖蹇洖澶嶄綘銆傚鏋滄偍璁や负鎴戠殑鏂囩珷鏈変换浣曢敊璇紝璇峰憡璇夋垜銆傚鏋滀綘鎶婇敊璇殑浜嬫儏鐞嗚В涓烘纭殑浜嬫儏锛岄偅灏嗗鎴戜滑鐨勮涓氭湁鍒┿€傝繖鏄嚧鍛界殑銆傝櫧鐒朵箣鍓嶇粡甯稿埛鍘熷瀷闈㈣瘯棰橈紝浣嗘槸涓€鐩村仠鐣欏湪鐭ヨ瘑鐐瑰緢娴呭緢妯$硦鐨勯樁娈碉紝缁忓父蹇樿锛堢浉淇″ぇ瀹堕兘涓€鏍凤紝鍝堝搱鍝堬級锛岃秮鐫€杩囧勾鐨勬渶鍚庝竴澶╂斁鍋囦簡锛堢粓浜庢懜鍒伴敭鐩樹簡锛夛紝璺熺潃b绔欑殑涓€娈佃棰戜簡瑙d簡鐩稿叧鏂归潰锛岀粓浜庡杩欎釜鏈変簡涓€涓暣浣撶殑浜嗚В銆傝繖閲屾暣鐞嗘€荤粨涓€涓嬨€傚憸鍛滃憸锛屾垜鍦ㄨ繖閲屽彂瑾擄紝鎺ヤ笅鏉ョ殑涓€鍛紝涓嶇鎴戝蹇欙紝鎴戦兘瑕佸涔犺繖绡囨枃绔狅紝鍚﹀垯锛屾帢閲戞案杩滄湁bug馃槪馃槪馃槪銆傚厛鐭ラ亾瀵瑰簲鍏崇郴prototype:prototype__proto__:prototypechain(linkpoint)affiliationprototype:鍑芥暟鐨勪竴涓睘鎬?>涓嶈鎯崇殑澶鏉傦紝鍏跺疄灏辨槸涓€涓櫘閫氱殑瀵硅薄{}__proto__:瀵硅薄涓婄殑涓€涓睘鎬?>涓嶈璁や负杩欏お澶嶆潅浜嗐€傚叾瀹炲氨鏄竴涓櫘閫氱殑瀵硅薄{}銆傚璞$殑__proto__淇濆瓨浜嗗璞$殑鏋勯€犲嚱鏁般€俻rototype鍑芥暟鏄竴涓壒娈婄殑瀵硅薄锛屾墍浠_proto__涔熷瓨鍦ㄤ簬鍑芥暟涓紝涔熸槸澶у缁忓父蹇樿鐨勪竴涓嚱鏁帮細Object鏄竴涓柟娉曪紙鏋勯€犲嚱鏁帮級锛宯ewObject鏄竴涓疄渚嬪璞★紒锛侊紒console.log(Object)//typeofObject==='function'console.log(newObject)//typeofnewObject==='object'constructor鏋勯€犲嚱鏁版槸瀹炰緥鍖栧璞$殑鏋勯€犲嚱鏁?/test.constructor->instance娴嬭瘯瀵硅薄鐨勬瀯閫犲嚱鏁癟estconsole.log(test.constructor===Test)//true//杩欓噷涓汉鐞嗚В鏄嚜宸辨病瀹屾病浜嗙殑鑷皟鐢紝瑙e喅闂锛屾病鎵惧埌鐩稿叧鏂囩珷銆俢onsole.log(test.constructor.prototype.constructor===Test)//trueconsole.log(test.constructor.prototype.constructor.prototype.constructor===Test)//true//鏋勯€犲櫒鍏佽鏀瑰彉鍑芥暟Test2(){this.a=123}test.constructor=Test2console.log(test)prototypefunctionTest(){}lettest=newTest()//test鏄痭ew瀹屾垚鍚庣殑瀹炰緥瀵硅薄console.log(test.__proto__===Test.prototype)//鏍规嵁涓婇潰鐨勫搴旇〃锛屾垜浠彲浠ョ煡閬撶粨鏋滀负鐪?/Test.prototype涔熸槸涓€涓璞★紝鎵€浠ヤ粬鑲畾涔熸湁__proto__//Test.prototype.__proto__宸茬粡鍒颁簡鏈€鍚巔oint,endpointisWhat,endpoint鏄疧bject鐨勬瀯閫犲嚱鏁帮紝鎵€浠ヤ笅闈㈢殑缁撴灉鏄痶ureconsole.log(Test.prototype.__proto__.constructor===Object)//骞朵笖鎸夌収涓婇潰鐨勫搴斿叧绯讳腑鐨勮鍒欎笂涓€涓粨鏋滐紝涓嬩竴涓粨鏋滀篃鏄痶ureconsole銆俵og(Test.prototype.__proto__===Object.prototype)////缁堢偣涓簄ullconsole.log(Object.prototype.__proto__)//null鑳藉惁鎻忚堪鍘熷瀷閾惧璞$殑__proto__鏉ヤ繚瀛樻瀯閫犲嚱鏁板璞$殑Prototype锛岃€宲rototype鏄竴涓璞★紝鎵€浠ュ畠涔熸湁鑷繁鐨刜_proto__锛屾墍浠ュ畠鏉ュ洖璧板埌搴昈bject.__proto__锛岃繖鏍峰氨褰㈡垚浜嗕竴涓互__proto__涓洪摼鎺ョ偣锛坘ey锛夌殑prototype瀵硅薄閾炬瀯閫犳柟娉曪紝涔熷氨鏄師鍨嬮摼銆?/__proto__test{b:333,a:1,__proto__:Test.prototype={c:222,b:2,__proto__:Object.prototype={c:3,__proto__:null}}}鐗规畩鍑芥暟瀵硅薄鐒︾偣锛欼nJS锛屼竴涓嚱鏁板氨鏄竴涓壒娈婄殑瀵硅薄锛侊紒锛佽寰楁枃绔犲紑澶寸殑瀵瑰簲琛?/鍑芥暟鏄竴涓壒娈婄殑瀵硅薄锛屾墍浠_proto__瀛樺湪锛岃€屼笖鏄竴涓猣unctionconsole.log(Test.__proto__)//functionconsole.log(Test.prototype)//鍥犱负objectTest鏄痑function,then搴曞眰涔熷繀椤婚€氳繃newFunction鏉ュ疄鐜帮紝閭d箞//瀵硅薄鐨刜_proto__淇濆瓨浜嗗璞$殑鏋勯€犲嚱鏁扮殑鍘熷瀷console.log(Test.__proto__===Function.prototype)//true鏄惁瀵瑰簲鍒拌繖閲岀殑鍏崇郴琛紵鍙互杩欐牱鐞嗚Вconstobj={}constobj2=newObject()console.log(Object)//functionconsole.log(typeofObject)//鏃㈢劧'function'Function鏄瀯閫犲嚱鏁帮紝鏄笉鏄篃搴旇鏈塤_proto_鍜宲rototype锛屾槸鐨勶紝浣嗚繖閲屾湁涓€鐐归渶瑕佺壒鍒浣忋€傚簳灞傝鍒欒瀹氾細Function.__proto__===Function.prototype鏄浉绛夌殑锛岄兘杩斿洖涓€涓嚱鏁般€傛垜鐨勭悊瑙f槸Function鏋勯€犺嚜宸便€?/姝e父鎯呭喌涓嬶紝涓€涓嚱鏁扮殑Test.prototype搴旇鏄竴涓璞★紝//Function.prototype鏄竴涓嚱鏁帮紝涔熸槸涓€涓壒娈婄偣typeofTest.prototype==='object'//trueconsole.log(Function.__proto__)//涓€涓嚱鏁癱onsole.log(Function.prototype)//鍥犱负涓€涓嚱鏁?/Function鏄竴涓嚱鏁皁bject_锛屽畠鐨刜proto__鎸囧悜瀹冪殑鏋勯€犲嚱鏁扮殑鍘熷瀷锛屽嵆//Function.__proto__===Function.prototype,璋冩暣鑷繁锛岃繖鏍风悊瑙e彲浠ュ悧锛焎onsole.log(Function.__proto__===Function.prototype)//true//鏃㈢劧Object鏄瀯閫犳柟娉曪紝閭d箞搴曞眰涔熸槸newFunctionconsole.log(Object.__proto__===Function.prototype)//true//鍥犱负Function.__proto__===Function.prototype鎵€浠ヤ笅闈㈢殑浠g爜鎴愮珛(Object.__proto__===Function.__proto__)===truehasOwnProperty鍜宨nhasOwnPropertyhasOwnProperty鐢ㄦ潵鍒ゆ柇鏄惁鏄璞℃湰韬殑灞炴€э紙缁ф壙鏉ヨ嚜闈炲師鍨嬮摼)lettest={a:1,b:2}Object.prototype.c=3console.log(test.hasOwnProperty('a'))//trueconsole.log(test.hasOwnProperty('b'))//trueconsole.log(test.hasOwnProperty('c'))//falseinin鐢ㄤ簬妫€鏌ュ璞℃槸鍚﹀寘鍚睘鎬э紙鍖呮嫭鍘熷瀷閾句笂鐨勫睘鎬э級console.log('a'intest)//trueconsole.log('b'intest)//trueconsole.log('c'intest)//trueconsole.log('toString'intest)//trueconsole.log('d'intest)//false蹇€熺悊瑙b€滃師鍨嬶紝鍘熷瀷閾锯€濈殑鍙傝€僊DN棣栨鍑虹幇鍦╥stao
