从底层理解这是什么

发布于:2024-10-24 编辑:匿名 来源:网络

杩欐槸浠?涔堬紵瀵规锛屾垜鎻愬嚭浠ヤ笅闂锛氳繖涓瓨鍌ㄥ湪鍝噷锛熷畠鏄浣曞嚭鐜板張濡備綍娑堝け鐨勶紵杩欐槸鍋氫粈涔堢殑锛熶负浜嗗厖鍒嗙悊瑙h繖涓?鐐癸紝鎴戜滑蹇呴』棣栧厛浜嗚В浠?涔堟槸 JavaScript 鎵ц涓婁笅鏂囧拰璋冪敤鍫嗘爤銆備负浜嗘竻妤氬湴瑙i噴杩欎竴鐐癸紝鎵ц涓婁笅鏂囩粨鍚堜簡銆婃祻瑙堝櫒宸ヤ綔鍘熺悊涓庡疄璺点??/a>鐨勯儴鍒嗗唴瀹广?傛垜浠厛鐪嬩竴涓嬭繖娈典唬鐮佺殑鍑芥暟璋冪敤杩囩▼锛氫唬鐮佽瑷?锛歵xt澶嶅埗var a = 2function add(){ var b = 10 return a+b}add() 杩欐浠g爜寰堢畝鍗曪紝棣栧厛鍒涘缓浜嗕竴涓猘dd鍑芥暟锛岀劧鍚庡湪浠g爜鐨勬渶鍚庡啀娆¤皟鐢ㄤ簡璇ュ嚱鏁般?傛墽琛屽嚱鏁癮dd()锛屽嵆鍦ㄧ6琛屼箣鍓嶏紝JavaScript寮曟搸浼氫负涓婇潰鐨勪唬鐮佸垱寤轰竴涓叏灞?鎵ц涓婁笅鏂囷紝鍖呮嫭澹版槑鐨勫嚱鏁板拰鍙橀噺锛屽彲浠ュ弬鑰冧笅鍥撅細 浠庡浘涓彲浠ョ湅鍑恒??锛屼唬鐮佷腑鐨勫叏灞?鍙橀噺鍜屽嚱鏁板瓨鍌ㄥ湪鍏ㄥ眬涓婁笅鏂囩殑鍙橀噺鐜涓紝褰撴墽琛屼笂涓嬫枃鍑嗗濂藉悗锛屽叏灞?浠g爜寮?濮嬫墽琛岋紝褰撴墽琛屽埌add鏃讹紝JavaScript鍒ゆ柇杩欐槸涓?涓嚱鏁拌皟鐢ㄣ?傜劧鍚庝細杩涜浠ヤ笅鎿嶄綔锛?棣栧厛锛屼粠鍏ㄥ眬鎵ц涓婁笅鏂囦腑鍙栧嚭add鍑芥暟浠g爜銆傚叾娆★紝缂栬瘧add鍑芥暟鐨勪唬鐮侊紝鍒涘缓鍑芥暟鐨勬墽琛屼笂涓嬫枃鍜屽彲鎵ц浠g爜銆傛渶鍚庢墽琛屼唬鐮佸苟杈撳嚭缁撴灉銆?銆傝繖鏍凤紝褰撴墽琛宎dd鍑芥暟鏃讹紝鎴戜滑灏辨嫢鏈変簡涓や釜鎵ц涓婁笅鏂団?斺?斿叏灞?鎵ц涓婁笅鏂囧拰add鍑芥暟鐨勬墽琛屼笂涓嬫枃銆備篃灏辨槸璇达紝鎵цJavaScript鏃讹紝鍙兘瀛樺湪澶氫釜鎵ц涓婁笅鏂囥??JavaScript 寮曟搸濡備綍绠$悊杩欎簺鎵ц涓婁笅鏂囷紵绛旀鏄?氳繃 JavaScript 璋冪敤鍫嗘爤銆傛帴涓嬫潵鎴戜滑鐪嬩竴涓婮avaScript璋冪敤鏍堟槸浠?涔堛?傛垜浠煡閬擄紝JavaScript鎵ц杩囩▼涓紝鍐呭瓨绌洪棿涓昏鍒嗕负鏍堛?傜┖闂村拰鍫嗙┖闂达紙鏆傛椂蹇界暐浠g爜绌洪棿锛夈?備粈涔堟槸JavaScript璋冪敤鏍堬細鍦ㄤ唬鐮佹墽琛岃繃绋嬩腑锛孞avaScript寮曟搸浼氬皢鎵ц涓婁笅鏂囧帇鍏ユ爤绌洪棿銆傝繖涓敤鏉ョ鐞嗘墽琛屼笂涓嬫枃鐨勫爢鏍堥?氬父绉颁负鎵ц銆備笂涓嬫枃鍫嗘爤锛屼篃绉颁负璋冪敤鍫嗘爤銆傛帴涓嬫潵锛屾垜浠竴姝ユ鍒嗘瀽浠ヤ笅浠g爜鎵ц杩囩▼涓?JavaScript 璋冪敤鏍堢殑鐘舵?佸彉鍖栵細 浠g爜璇█锛歵xt copy var a = 2function add(b,c){ return b+c}function addAll(b,c ){ var d = 10 result = add(b,c) return a+result+d}addAll(3,6) 绗竴姝ユ槸鍒涘缓涓?涓叏灞?涓婁笅鏂囧苟灏嗗叾鍘嬪叆鍫嗘爤搴曢儴銆傚涓嬪浘鎵?绀猴細 浠庡浘涓繕鍙互鐪嬪嚭锛屽彉閲廰銆佸嚱鏁癮dd銆乤ddAll閮戒繚瀛樺湪鍏ㄥ眬鎵ц涓婁笅鏂囩殑鍙橀噺鐜瀵硅薄涓?傚皢鍏ㄥ眬鎵ц涓婁笅鏂囨帹鍏ヨ皟鐢ㄥ爢鏍堝悗锛孞avaScript 寮曟搸寮?濮嬫墽琛屽叏灞?浠g爜銆傞鍏堬紝杩涜a=2鐨勮祴鍊艰繍绠椼?傛墽琛岃繖鏉¤鍙ヤ細灏嗗叏灞?涓婁笅鏂囧彉閲廵nvironment涓殑a鐨勫?艰缃负2銆傝缃悗鍏ㄥ眬涓婁笅鏂囩殑鐘舵?佸涓嬪浘鎵?绀猴細 绗簩姝ワ紝璋冪敤addAll鍑芥暟銆傚綋鍑芥暟琚皟鐢ㄦ椂锛孞avaScript寮曟搸浼氬鍑芥暟杩涜缂栬瘧锛屼负鍑芥暟鍒涘缓鎵ц涓婁笅鏂囷紝鏈?鍚庡皢鍑芥暟鐨勬墽琛屼笂涓嬫枃鍘嬪叆鏍堜腑锛屽涓嬪浘锛?绗笁姝ワ紝褰揳dd鍑芥暟鏃舵墽琛宑all璇彞鏃讹紝add鍑芥暟杩斿洖鏃讹紝浼氫粠鏍堥《寮瑰嚭璇ュ嚱鏁扮殑鎵ц涓婁笅鏂囷紝骞跺皢result鐨勫?艰缃粰add鍑芥暟銆傝繑鍥炲?间负9銆傚涓嬪浘鎵?绀猴細 addAll鎵ц瀹屾渶鍚庝竴娆″姞娉曟搷浣滃苟杩斿洖鍚庯紝addAll鐨勬墽琛屼笂涓嬫枃涔熶細浠庢爤椤跺脊鍑恒?傛鏃讹紝璋冪敤鍫嗘爤涓彧鍓╀笅鍏ㄥ眬涓婁笅鏂囥?傛渶鍚庡涓嬪浘鎵?绀猴細 鑷虫锛屾暣涓狫avaScript娴佺▼鐨勬墽琛屽氨缁撴潫浜嗐?傚ソ浜嗭紝鐜板湪浣犲簲璇ョ煡閬撹皟鐢ㄥ爢鏍堟槸 JavaScript 寮曟搸璺熻釜鍑芥暟鎵ц鐨勪竴绉嶆満鍒躲?傚綋鍚屾椂璋冪敤澶氫釜鍑芥暟鏃讹紝鍙互閫氳繃璋冪敤鏍堟潵璺熻釜鍝釜鍑芥暟姝e湪鎵ц浠ュ強鍑芥暟涔嬮棿鐨勮皟鐢ㄥ叧绯汇??銆傞噸璇讳竴閬嶏紝鐩镐俊鏍规嵁涓婇潰鐨勫唴瀹癸紝澶у搴旇宸茬粡鏄庣櫧浠?涔堟槸JavaScript鎵ц涓婁笅鏂囧拰璋冪敤鏍堜簡銆傝鎴戜滑鍐嶇湅鐪嬭繖涓?備簨瀹炰笂锛屽畠涔熷瓨鍌ㄥ湪鎵ц涓婁笅鏂囦腑銆傛墽琛屼笂涓嬫枃鍖呮嫭锛氬彉閲忕幆澧冦?佽瘝娉曠幆澧冦?乷uter銆乼his銆傚涓嬪浘鎵?绀猴細 浠庡浘涓彲浠ョ湅鍑猴紝this鏄笌鎵ц涓婁笅鏂囩粦瀹氱殑锛屼篃灏辨槸璇存瘡涓墽琛屼笂涓嬫枃涓兘鏈変竴涓猼his銆傛墽琛屼笂涓嬫枃涓昏鍒嗕负涓夌锛氬叏灞?鎵ц涓婁笅鏂囥?佸嚱鏁版墽琛屼笂涓嬫枃銆乪val鎵ц涓婁笅鏂囷紝鎵?浠ュ搴旂殑this鍙槸杩欎笁绉嶅叏灞?鎵ц涓婁笅鏂囦腑this鍑芥暟涓璽hiseval涓殑this锛堣繖绉嶆儏鍐垫垜鍏堜笉瑙i噴浜嗭級 锛夈?傚叏灞?鎵ц涓婁笅鏂囦腑鐨則his鍦ㄦ帶鍒跺彴涓緭鍏ヤ唬鐮佽瑷?锛歵xt copy console.log(this) //windowconsole.log(this === window) // true 鎴戜滑鍙互鐪嬪埌锛氬叏灞?鎵ц涓婁笅鏂囦腑鐨則his涔熸寚鍚戠獥鍙e璞°?傚嚱鏁版墽琛屼笂涓嬫枃涓殑this鎵ц濡備笅浠g爜锛?浠g爜璇█锛歵xt copy function foo(){ console.log(this) // window}foo() 鍙互鐪嬪埌杈撳嚭浜唚indow锛岃鏄庨粯璁よ皟鐢ㄤ簡涓?涓嚱鏁帮紝鍏舵墽琛屼笂涓嬫枃涓殑This涔熸寚鍚憌indow瀵硅薄銆傚彲浠ヨ涓猴紝JavaScript寮曟搸鎵цfoo()鏃讹紝浼氳浆鎹㈡垚锛?浠g爜璇█锛歵xt copy function foo(){ console.log(this) // window}window.foo.call(window) 鏄剧劧姣忎釜浜洪兘鏈夊彂鐜板彲浠ラ?氳繃璋冪敤鏉ユ敼鍙榯his鎸囬拡銆傛垜浠潵鍒椾妇涓?涓嬪嚱鏁版墽琛屼笂涓嬫枃涓缃鍊肩殑鏂规硶锛?1銆侀?氳繃鍑芥暟鐨刢all銆乤pply銆乥ind鏂规硶璁剧疆鐢ㄦ硶濡備笅锛?浠g爜璇█锛歵xt copy let bar = { myName: "dell",} function foo() { this.myName = "dellyoung"}foo.call(bar)console.log(bar) // {myName:"dellyoung"}console.log(myName) // 閿欒 myName 鏈畾涔夈?傛墽琛屼笂闈㈢殑浠g爜鏃讹紝浼氭墦鍗皗銆?myName: "delyoung"} 骞朵笖 myName 鏄湭瀹氫箟鐨勯敊璇秷鎭?傛樉鐒讹紝褰揻oo()鎵ц鏃讹紝瀹冪殑this鎸囬拡鎴愬姛鎸囧悜浜哹ar銆傛鏃禸ar灏辨槸foo()鐨則his2銆傚皾璇曢?氳繃瀵硅薄璋冪敤鏂规硶璁剧疆鎵ц浠ヤ笅鎿嶄綔銆備唬鐮佷唬鐮佽瑷?锛歵xt copy var myObj = { name: "dellyoung", showThis: function(){ console.log(this) }}myObj.showThis() 鎵撳嵃鍑?{ name: 'dellyoung', showThis: [Function: showThis ] } 锛屾樉鐒剁幇鍦?this 鎸囧悜璋冪敤瀹冪殑 myObj 銆傚彲浠ュ緱鍑虹粨璁猴細鐢ㄤ竴涓璞¤皟鐢ㄥ畠鍐呴儴鐨勬柟娉曪紝鏂规硶鐨則his鎸囧悜瀵硅薄鏈韩銆傚彲浠ヨ涓猴紝褰?JavaScript 寮曟搸鎵ц myObject.showThis() 鏃讹紝灏嗗叾杞崲涓猴細 浠g爜璇█锛歵xt 澶嶅埗 myObj.showThis.call(myObj) 3銆佹牴鎹互涓婁袱鐐瑰緱鍑轰竴涓皬缁撹銆傝皟鐢ㄥ叏灞?鐜涓殑鍑芥暟銆傚姛鑳?鍐呴儴this鎸囧悜鍏ㄥ眬鍙橀噺window銆傝璋冪敤瀵硅薄鍐呴儴鐨勬柟娉曪紝鏂规硶鐨勬墽琛屼笂涓嬫枃涓殑 this 鎸囧悜瀵硅薄鏈韩銆傝皝璋冪敤浜嗚鍑芥暟锛屽嚱鏁扮殑 this 鎸囧悜璋併?備笉鐢ㄨ锛屽璞¤皟鐢ㄥ嚱鏁帮紝鍏ㄥ眬鐜?冭皟鐢ㄥ叾瀹炲彲浠ョ悊瑙d负window璋冪敤锛屾墍浠ュ綋鐒舵寚鍚憌indow4銆傞?氳繃鏋勯?犲嚱鏁颁腑鐨勮缃紝鎴戜滑鏉ョ湅鐪嬮?氳繃new璋冪敤鏋勯?犲嚱鏁板埌搴曞仛浜嗕粈涔堬細 浠g爜璇█锛歵xt copy function polyNew(source, ...arg) { // 鍒涘缓涓?涓┖鐨勭畝鍗旿avaScript瀵硅薄锛堝嵆{ }) 璁?newObj = {}; // 灏嗘瀵硅薄閾炬帴锛堝嵆璁剧疆璇ュ璞$殑鏋勯?犲嚱鏁帮級鍒板彟涓?涓璞?Object .setPrototypeOf(newObj, source.prototype); // 浣跨敤姝ラ1涓柊鍒涘缓鐨勫璞′綔涓簍his鐨勪笂涓嬫枃锛?const resp = source.apply(newObj, arg); // 鍒ゆ柇鍑芥暟鐨勮繑鍥炲?兼槸鍚︿负瀵硅薄 if (Object.prototype.toString.call(resp) === "[object Object]") { // 濡傛灉鍑芥暟涓嶈繑鍥炲璞★紝鍒欒繑鍥?this銆? return resp } else { // 濡傛灉鍑芥暟杩斿洖涓?涓璞★紝鍒欎娇鐢ㄨ繑鍥炵殑瀵硅薄浣滀负杩斿洖鍊笺?? return newObj }} 鏄剧劧鎴戜滑鐪嬪埌浜唖ource.apply(newObj, arg)锛屾墍浠ユ瀯閫犲嚱鏁板疄闄呬笂鏀瑰彉浜唗his鎸囬拡锛屽皢this鎸囬拡浠庡師鏉ョ殑鍑芥暟鏇存敼涓烘柊鏋勯?犵殑鍑芥暟銆傝繖涓瓨鍌ㄥ湪鍝噷锛熻繖瀛樺偍鍦ㄦ瘡涓墽琛屼笂涓嬫枃涓?傚畠鏄浣曞嚭鐜颁互鍙婂浣曟秷澶辩殑锛熷畠涓庢墽琛屼笂涓嬫枃涓?璧峰嚭鐜帮紝骞跺湪鍥炴敹鎵ц涓婁笅鏂囨椂娑堝け銆傝繖涓湁浠?涔堜綔鐢ㄥ憿锛熷湪鍏ㄥ眬鎵ц涓婁笅鏂囦腑锛歵his鎸囧悜window瀵硅薄锛屾柟渚挎垜浠皟鐢ㄥ叏灞?window瀵硅薄銆傚湪鍑芥暟鎵ц涓婁笅鏂囦腑锛歵his鎸囧悜璋冪敤鍑芥暟鐨勫璞★紝鍑忓皯鍙傛暟鐨勪紶閫掋?傛湰鏉ワ紝濡傛灉闇?瑕佸湪鍑芥暟鍐呴儴鎿嶄綔琚皟鐢ㄧ殑瀵硅薄锛屽綋鐒朵篃闇?瑕佸皢瀵硅薄浣滀负鍙傛暟浼犻?掞紝浣嗘槸鏈変簡杩欎釜锛屽氨娌℃湁蹇呰浜嗐??锛屾偍鍙互閫氳繃鐩存帴鑾峰彇 this 鏉ユ搷浣滆璋冪敤瀵硅薄鐨勫睘鎬с?備粈涔堟槸璋冪敤銆佸簲鐢ㄥ拰缁戝畾锛熶笂闈㈡垜浠娇鐢ㄤ簡澶氭璋冪敤銆傛偍涓?瀹氬凡缁忎簡瑙?call 鐨勪綔鐢細MDN锛歝all() 鏂规硶浣跨敤鎸囧畾鐨?this 鍊煎拰鍗曠嫭缁欏嚭鐨勪竴涓垨澶氫釜鍙傛暟鏉ヨ皟鐢ㄥ嚱鏁般?備緥濡傦細 浠g爜璇█锛歵xt copy let bar = { myName : "dellyoung",}function foo(){ console.log(this.myName)}foo.call(bar) // 鎵撳嵃鍑篸ellyoung锛屼篃灏辨槸璇达細 call 鍦ㄤ娇鐢?foo 鍑芥暟鏃讹紝閫氳繃浣跨敤 call() 骞朵紶鍏?bar锛屼娇寰?foo 鍑芥暟鍐呴儴鐨?this 鎸囧悜 bar 鏉ュ疄鐜拌皟鐢ㄣ?傛垜浠牴鎹繖涓粨璁烘潵瀹炵幇璋冪敤锛?浠g爜璇█锛歵xt copy Function.prototype.dellCall = function ( context = window,...param) { // call 鏂规硶鍙湁鏄嚱鏁版墠鑳借璋冪敤 if (typeof this !== 'function') { return new TypeError("绫诲瀷閿欒"); // 杩欐槸涓?涓璋冪敤鐨勫嚱鏁帮紝閫氳繃缁欎紶鍏ョ殑瀵硅薄璧嬪?硷紝杈惧埌灏嗚璋冪敤鐨勫嚱鏁版坊鍔犲埌浼犲叆鐨勫璞′腑鐨勭洰鐨?context.fun = this; // 浣跨敤浼犲叆鐨勫璞℃潵璋冪敤闇?瑕佽皟鐢ㄧ殑鍑芥暟锛屽苟淇濈暀杩斿洖缁撴灉 const resp = context.fun(...param); // 鍒犻櫎浼犲叆瀵硅薄涓婃坊鍔犵殑鍑芥暟锛岄槻姝㈠唴瀛樻硠婕?Reflect.deleteProperty(context, 'fun'); // 杩斿洖缁撴灉 return resp;};鍏跺疄鏍稿績寰堢畝鍗曘?傛垜浠潵鍒嗘瀽涓?涓嬶細灏嗚璋冪敤鐨勫嚱鏁颁綔涓哄睘鎬ф坊鍔犲埌浼犲叆鐨勫璞′笂锛岃繖鏍峰氨鍙互鍦ㄤ紶鍏ョ殑瀵硅薄涓婅皟鐢ㄩ渶瑕佽皟鐢ㄧ殑鍑芥暟浜嗐?傜粡杩囧垎鏋愶紝鎴戜滑鍙戠幇鏍稿績鍘熺悊浠嶇劧鏄細璋佽皟鐢ㄥ嚱鏁帮紝鍑芥暟鐨則his鎸囧悜璋侊紝淇濇寔涓嶅彉锛氳皝璋冪敤鍑芥暟锛宼his鎸囧悜璋併?傝繖鍙ヨ瘽鍏跺疄鍙互甯姪鎴戜滑鐞嗚В澶ч儴鍒嗚繖涓棶棰樸?傚疄鐜癮pplyapply鍏跺疄鍜宑all绫讳技锛屽彧鏄紶閫掑弬鏁扮殑鏂瑰紡涓嶅悓锛?浠g爜璇█锛歵xt copy foo.call(obj,[param1,param2,..., paramN]) // 鍙傛暟鏄竴涓暟缁勶紝浼犻?掍互鏁扮粍浣滀负鍙傛暟 foo.apply(obj, param1, param2,..., paramN) // 鍙傛暟涓嶆槸鏁扮粍锛屽彲浠ヤ紶閫掑瓧绗︿覆鍙傛暟銆傝鎴戜滑绋嶅井鏀瑰彉涓?涓嬩笂闈㈢殑璋冪敤銆傚彧闇?apply锛?浠g爜璇█锛歵xt copy Function.prototype.dellApply = function (context = window, param = []) { // call鏂规硶鍙湁鏄嚱鏁版墠鑳借皟鐢?if (typeof this !== 'function' ) { return new TypeError("绫诲瀷閿欒"); } // 灏嗚璋冪敤鐨勫嚱鏁颁綔涓哄睘鎬ф坊鍔犲埌浼犲叆鐨勫璞?context.fun = this; // 鍦ㄤ紶鍏ョ殑瀵硅薄涓婏紝璋冪敤闇?瑕佽皟鐢ㄧ殑鍑芥暟 const resp = context.fun(...param); // 鍒犻櫎浼犲叆瀵硅薄涓婃坊鍔犵殑鍑芥暟锛岄槻姝㈠唴瀛樻硠婕?Reflect.deleteProperty(context, 'fun'); // 杩斿洖缁撴灉 return resp;} 瀵逛簬bindbind鐨勭洰鐨勪篃鏄姝わ紝鏀瑰彉this锛屼絾瀹冧笉鐩存帴璋冪敤鍑芥暟锛岃?屾槸杩斿洖鏀瑰彉鍐呴儴this鍊肩殑鍑芥暟锛岀劧鍚庡湪闇?瑕佺殑鏃跺?欒皟鐢細瀹炵幇锛氫唬鐮佽瑷?锛歵xt copy Function.prototype.dellBind = function (context) { // call鏂规硶鍙湁鏄嚱鏁版墠鑳借皟鐢?if (typeof this!== 'function') { return new TypeError(" Type Error") } // 浣跨敤璇ュ彉閲忎繚瀛樿璋冪敤鐨勫嚱鏁?const that = this; // 淇濆瓨浼犲叆鐨勫嚱鏁拌緭鍏ュ弬鏁?const argArr = [...鍙傛暟]; // 杩斿洖涓?涓嚱鏁帮紝杩欐牱褰撹繑鍥炵殑鍑芥暟琚皟鐢ㄦ椂锛屽唴閮ㄧ殑that.call()鍑芥暟灏变細琚墽琛?return function F() { // 浣跨敤call鏉ュ疄鐜板彉鍖栵紝琚皟鐢?鍑芥暟鍐呴儴鐨則his鐐硅繑鍥瀟hat.call(context, [...argArr, ...arguments]);鎴戜滑鏉ュ垎鏋愪竴涓媌ind锛氬叾瀹瀊ind鍜宎pply鍙湁涓?澶勫尯鍒??Bind 杩斿洖涓?涓凡鏇存敼鐨勫唴閮?this 鎸囬拡銆傚綋鍑芥暟璋冪敤杩斿洖鍑芥暟鏃讹紝鍙渶鏇存敼鍐呴儴this鎸囧悜鐨勫嚱鏁板嵆鍙繍琛屻?傝繍琛屽悗杩斿洖缁撴灉涔熷緢瀹规槗瀹炵幇銆?bind return涓嶅啀鍍廲all涓?鏍疯繑鍥炵粨鏋滐紝鑰屾槸杩斿洖涓?涓嚱鏁般?傚綋鐒讹紝璋冪敤杩斿洖鐨勫嚱鏁板彲浠ラ?氳繃杩愯this鎸囬拡鏉ヤ紭鍖栧唴閮ㄥ凡缁忔敼鍙樼殑鍑芥暟锛氫弗鏍兼潵璇达紝杩欏苟涓嶆槸涓?涓悎鏍肩殑bind锛屽洜涓鸿繕闇?瑕佽?冭檻灏嗚鍑芥暟浣滀负鏋勯?犲嚱鏁拌皟鐢ㄧ殑鎯呭喌銆傚綋浣跨敤new浣滀负鏋勯?犲嚱鏁拌皟鐢ㄥ嚱鏁版椂锛屼笉瑕佹敼鍙榯his鐨勮鐐癸紝鍙渶灏唍ew杩斿洖缁欒璋冪敤鐨勫嚱鏁板嵆鍙?備唬鐮佸涓嬶細 浠g爜璇█锛歵xt copy Function.prototype.dellBind = function (context) { // call鏂规硶鍙湁鍒ゆ柇涓哄嚱鏁版墠鑳借皟鐢?if (typeof this !== 'function') { return new TypeError("Type Error") } // 浣跨敤璇ュ彉閲忎繚瀛樿璋冪敤鐨勫嚱鏁?const that = this; // 淇濆瓨浼犲叆鐨勫弬鏁?const argArr = [...arguments]; // 杩斿洖涓?涓嚱鏁?return function F() { // 濡傛灉浣跨敤 new锛屽垯鏋勯?犲嚱鏁?if (this instanceof F) { return new that(...argArr, ...arguments); } // 浣跨敤 call 鏉ユ洿鏀硅璋冪敤鍑芥暟鍐呯殑 this 鎸囬拡 return that.apply(context, [...arg鍛冿紝...浜夎]); }} 鍒嗘瀽涓?涓嬶細閫氳繃instanceof鍒嗘瀽灏卞彲浠ュ緱鍒般?傝繖鏄疐閫氳繃new鑾峰緱鐨勫悧锛熸柊鐨勫凡缁忔彁鍒拌繃銆?new 鎿嶄綔涓師鍨嬮摼浼氳鏇挎崲锛?A.__proto__ == = B.prototype 鎵?浠ュ鏋?F 鐨勫師鍨嬪湪 this 鐨勫師鍨嬮摼涓婏紝閭d箞褰撶劧鏄娇鐢?new 浣滀负鏋勯?犲嚱鏁版潵璋冪敤瀹冦?傛垜浠繕搴旇浣跨敤 new 鏉ヨ繑鍥炲嚱鏁般?傜湅瀹岃繖涓や欢浜嬶紝璇峰姞鎴戝井淇★紙iamyyymmm锛夛紝甯︿綘杩涙妧鏈兢锛岄暱鏈熶氦娴佸涔狅紝鍏虫敞鍏紬鍙封?滄埓鍝ュ疄楠屽鈥濓紝鍜屾埓鍝ヤ竴璧峰涔犲墠绔紝鎻愬崌浣犵殑鎶?鏈璇嗮煂堝枩娆㈠苟鏀寔鎴戰煂?

从底层理解这是什么

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 杭州将把创业投资引导基金规模从10亿元扩大到30亿元

    杭州将把创业投资引导基金规模从10亿元扩大到30亿元

    据新华社报道,投资界5月26日消息,为深入实施创新驱动发展战略,充分发挥发挥创业投资促进创新创业的积极作用 杭州市发展改革委、市财政局近日决定,规范杭州市创业投资引导基金运作,扩大引导基金规模从10亿元到30亿元。 杭州市发改委、市财政局联合印发的《杭州市创业投资

    06-18

  • 疯狂的NVIDIA

    疯狂的NVIDIA

    如果要评选年度最热门的公司,NVIDIA一定有一席之地。 2019年生成式AI的爆发,使得一种只在消费电子产品中出现的现象在企业级芯片的采购中很少出现:科技行业的每个人都等待数月并花费大量资金。 购买一个你可能看不到真面目的产品,Nvidia H,这是一款可以在训练 AI 过程中显

    06-18

  • 曹操出行完成38亿元B轮融资,这是今年国内网约车领域首笔股权投资,

    曹操出行完成38亿元B轮融资,这是今年国内网约车领域首笔股权投资,

    据投资界(ID:pedaily)9月6日消息,曹操旅游宣布完成38亿元B轮融资。 人民币。 本轮融资不仅是今年以来网约车公司境内首笔股权投资,也是今年以来网约车旅游公司境内单笔金额最大的融资。 吉利控股集团董事长李书福表示,布局大众出行是吉利科技转型战略的关键举措之一。

    06-18

  • 摩根士丹利或因Facebook上市遭调查

    摩根士丹利或因Facebook上市遭调查

    美国金融业监管局负责人表示,摩根士丹利或面临监管机构调查。 据悉,该分析公司上周在Facebook首次公开募股前向其进行了报告。 机构投资者散布负面消息。 金融业监管局主席及其首席执行官理查德凯彻姆今天在一封电子邮件中表示,如果这些指控属实,将导致投资者对金融业监管

    06-18

  • 刚刚,谷歌又被欧盟罚款113亿人民币

    刚刚,谷歌又被欧盟罚款113亿人民币

    雷锋网消息:北京时间3月20日晚,欧盟反垄断领导人玛格丽特维斯塔格召开新闻发布会,正式宣布谷歌将被罚款14.9亿人民币欧元(约16.9亿欧元)。 因谷歌涉嫌垄断在线搜索广告而被罚款 10 亿美元(1 亿元人民币)。 这是谷歌自2008年以来第三次收到欧盟的反垄断罚款。 在这次会议

    06-18

  • 天山股份利润双双下滑,净利润同比下降7.31%至15.16亿元

    天山股份利润双双下滑,净利润同比下降7.31%至15.16亿元

    天山股份(77.SZ)发布年报。 公司实现营业收入86.92亿元,同比下降10.28%,净利润15.16亿元,同比下降7.31%,加权平均净资产收益率14.26%,基本每股收益1元/股。

    06-18

  • 共享电动汽车再次受到资本青睐, “巴歌旅游”宣布完成2500万元A轮融资,

    共享电动汽车再次受到资本青睐, “巴歌旅游”宣布完成2500万元A轮融资,

    据投资界7月18日消息,新能源汽车分时租赁平台“巴歌出行”宣布完成万元A轮融资。 智行创新领投,联想之星跟投。   巴歌旅游CEO孙杨表示,本轮融资将助力其城市扩张和规模化运营,并将其盈利模式快速复制到全国更多城市。    此前,巴歌出行于今年3月获得宝嘉租车1万元天

    06-18

  • 中国联通将率先推出iPhone 4S,中国电信10月开售传闻已破灭

    中国联通将率先推出iPhone 4S,中国电信10月开售传闻已破灭

    10月8日消息,根据业内人士的爆料以及多家投行的预测,苹果刚刚发布的iPhone 4S在中国大陆仍然有其第一家合作伙伴。 首先是中国联通,其次是中国电信。 预计中国电信将晚于中国联通推出CDMA版iPhone 4S。 此前有关中国电信将在10月份销售iPhone 5的传言自然已经破灭。    此

    06-18

  • 麦当劳不再使用一次性餐具,花了两年时间用婴儿奶瓶材料重新设计 - Feel Good每周

    麦当劳不再使用一次性餐具,花了两年时间用婴儿奶瓶材料重新设计 - Feel Good每周

    Feel Good浠嬬粛鑰愬厠鈥滃緟椋庢潵鈥濓紝闆剁⒊鐗╂祦鍥紑鍚汉璞″拰骞筹紝闇?瑕佲?滆湝铚傗?濆棥鍡′袱澹?016骞翠负楹﹀綋鍔宠璁$幆淇濋鍏佛煉hristopher Raeburn锛氭垜瑙佽瘉浜嗕汉浠鍙寔缁椂灏氭?佸害鐨勮浆鍙橈紝鍥炴敹鏉愭枡琚敤鏉ュ埗浣滈珮绔

    06-21

  • 新锐个人护理品牌“Rock Zoo”连续完成两轮千万美元融资,打造年轻一代生活方式品牌

    新锐个人护理品牌“Rock Zoo”连续完成两轮千万美元融资,打造年轻一代生活方式品牌

    新锐个人护理品牌“Rock Zoo”近日完成融资数千万美元A轮和A+轮融资,其中A轮融资由明讯资本领投,源码资本跟投; A+轮融资由创新工场领投,先锋长青、源码资本、清流资本跟投。 本次募集资金将主要用于研发投入、产品拓展、品牌建设、团队储备和扩张。 Rock Zoo于今年1月开设

    06-17

  • 解码乐居机器人:一支年轻的科技创新团队破茧而出

    解码乐居机器人:一支年轻的科技创新团队破茧而出

    在世界机器人大会上,工信部部长苗圩强调“加快机器人产业发展是机器人产业发展的重要方向”制造业高质量发展。 发展过程中面临诸多问题和挑战。 机器人产业关键核心技术有待进一步提升,应用场景和领域有待进一步拓展。 “我国的机器人产业发展到现在,已经有很多多年掌握核

    06-18

  • 滴滴进军俄罗斯市场,鞑靼斯坦成为走出去的第一站

    滴滴进军俄罗斯市场,鞑靼斯坦成为走出去的第一站

    投资界(ID:pedaily)7月28日消息,据共和国投资发展局官网发布的消息鞑靼斯坦共和国,滴滴最近已聘请司机为喀山市提供出行服务做准备。 喀山将成为滴滴进军俄罗斯市场的第一站。 周五,俄罗斯机密信息网络Avito发布了滴滴在喀山招募司机的通知。 。 通知显示,“孔夫子”公

    06-18