馃樉New鐨勫師鐞唍ew鍏抽敭瀛楃殑涓昏浣滅敤鏄墽琛屼竴涓瀯閫犲嚱鏁帮紝杩斿洖涓€涓疄渚嬪璞°€傚湪new鐨勮繃绋嬩腑锛屾牴鎹瀯閫犲嚱鏁扮殑鎯呭喌锛屽垽鏂槸鍚﹀彲浠ユ帴鍙椾紶鍏ョ殑鍙傛暟銆備笅闈㈤€氳繃涓€娈典唬鐮佹潵鐪嬩竴涓猲ew鐨勭畝鍗曚緥瀛愩€俷ewoperator鍙互甯姪鎴戜滑鏋勫缓瀹炰緥骞剁粦瀹氬畠銆傚唴閮ㄦ墽琛屾楠ゅぇ鑷村彲浠ュ垎涓轰互涓嬪嚑姝ワ細馃摃鍒涘缓涓€涓柊瀵硅薄馃摃瀵硅薄杩炴帴鍒版瀯閫犲嚱鏁扮殑鍘熷瀷锛屽苟缁戝畾this锛坱his鎸囧悜鏂板璞★級馃摃鎵ц鏋勯€犲嚱鏁颁唬鐮侊紙娣诲姞灞炴€у埌thisnewobject)馃摃杩斿洖newobject鐨勫紓甯稿鏋滄病鏈変娇鐢╪ew鍏抽敭瀛楋紝缁撳悎涓婇潰鐨勪唬鐮佹敼閫犱竴涓嬶紝鍘绘帀new锛屼細鍙戠敓浠€涔堟牱鐨勫彉鍖栵紵鎴戜滑鍐嶇湅涓嬮潰鐨勪唬鐮?/'usestrict';functionPerson(){this.name="姹熷皬鐧?;}varp=Person();console.log(p);//undefinedconsole.log(name)//姹熷皬鐧絚onsole.log(p.name);//Cannotreadproperty'name'ofundefined馃摂浠庝笂闈㈢殑浠g爜鍙互鐪嬪嚭锛屾垜浠病鏈変娇鐢╪ew鍏抽敭瀛楋紝杩斿洖鐨勭粨鏋滄槸undefined銆傚叾涓紝鐢变簬JavaScript浠g爜榛樿鎸囧悜window锛宯ame杈撳嚭缁撴灉涓烘睙灏忕櫧锛屽睘浜庢病鏈塶ew鍏抽敭瀛楃殑鎯呭喌銆傪煋旈偅涔堝綋鏋勯€犲嚱鏁颁腑鏈夎繑鍥炲璞$殑鎿嶄綔鏃讹紝缁撴灉浼氭槸浠€涔堟牱瀛愬憿锛熸垜浠潵鐪嬩竴娈靛湪涓婇潰鐨勫熀纭€涓婁慨鏀圭殑浠g爜銆俧unctionPerson(){this.nem="姹熷皬鐧?;return{age:22};}varp=newPerson();console.log(p);//{age:22}console.log(p.name);//undefinedconsole.log(p.age);//22閫氳繃杩欐浠g爜鍙互鐪嬪嚭锛屽綋鏋勯€犲嚱鏁版渶鍚庤繑鍥炵殑鏄竴涓笌this鏃犲叧鐨勫璞℃椂锛宯ew鍛戒护浼氱洿鎺ヨ繑鍥炴柊鐨勫璞★紝鑰屼笉鏄柊鐨勬墽琛屾楠ょ敓鎴愮殑this瀵硅薄锛屼絾鏄繖閲岀殑鏋勯€犲嚱鏁板繀椤昏繑鍥炰竴涓璞★紝濡傛灉杩斿洖鐨勪笉鏄璞★紝閭d箞杩樻槸浼氭寜鐓ew鐨勬墽琛屾楠よ繑鍥炴柊鐢熸垚鐨勫璞°€傛帴涓嬫潵锛屽湪涓婅堪浠g爜鐨勫熀纭€涓婏紝淇敼functionPerson(){this.name='姹熷皬鐧?;杩斿洖'鈥嬧€媡om';}varp=newPerson();console.log(p)//{name:'姹熷皬鐧?}console.log(p.name)//姹熷皬鐧金煉濇€荤粨涓€涓嬶細new鍏抽敭瀛楁墽琛屽悗锛屾€讳細杩斿洖涓€涓璞★紝瑕佷箞鏄疄渚媜bjectorreturn璇彞鎸囧畾鐨勫璞♀湉锔廻andwritingimplementationnew//handwritingsimulationnewfunctionmyNew(fn,...args){if(typeoffn!=='function'){throw'fnmastbeafunction';}//1.浣跨敤newObject()鍒涘缓涓€涓璞bjvarobj=newObject();//2.灏嗗璞$殑__proto__璧嬪€肩粰fn.prototype锛屽嵆璁剧疆鍘熷瀷閾緊bj.__proto__=Object.create(fn.prototype);//3.鎵цfn锛屽苟浣跨敤obj浣滀负鍐呴儴this銆備娇鐢╝pply锛?/灏嗘瀯閫犲嚱鏁皌his鐨勬寚閽堟敼涓烘柊鍒涘缓鐨勫璞★紝//杩欐牱obj灏卞彲浠ヨ闂瀯閫犲嚱鏁颁腑鐨勫睘鎬arresult=fn.apply(obj,args);//4.濡傛灉fn鏈夎繑鍥炲€硷紝鍒欏皢鍏朵綔涓烘柊鎿嶄綔杩斿洖锛屽惁鍒欒繑鍥瀘bjreturnresultinstanceofObject?result:obj;}馃敄test//娴嬭瘯鍑芥暟Person(...args){console.log(args)}//浣跨敤鍐呯疆鍑芥暟newvarperson1=newPerson(1,2)console.log(person1)//浣跨敤鎵嬪啓鐨刵ew锛屽嵆createvarperson2=myNew(Person,1,2)console.log(person2)new琚皟鐢ㄥ悗澶ц嚧鍋氫簡浠€涔堭煋掑厑璁稿疄渚嬭闂鏈夊睘鎬э紱馃搾鍏佽瀹炰緥璁块棶鏋勯€犲嚱鏁板師鍨嬶紙constructor.prototype锛夋墍鍦ㄥ師鍨嬮摼涓婄殑灞炴€э紱馃搾鏋勯€犲嚱鏁拌繑鍥炵殑鏈€缁堢粨鏋滄槸寮曠敤鏁版嵁绫诲瀷銆?/p>
