cainiaoblog 23.2.171
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CNAME +1 -0
- package/MP_verify_o6dHCK5mIkxNpzvZ.txt +1 -0
- package/README.md +8 -0
- package/about/index.html +54 -0
- package/ads.txt +1 -0
- package/app/manual.html +104 -0
- package/appConfigs/config +1 -0
- package/archives/2018/index.html +48 -0
- package/archives/2019/index.html +48 -0
- package/archives/2019/page/2/index.html +48 -0
- package/archives/2020/index.html +48 -0
- package/archives/2021/index.html +48 -0
- package/archives/2022/index.html +48 -0
- package/archives/2023/index.html +48 -0
- package/archives/index.html +48 -0
- package/archives/page/2/index.html +48 -0
- package/archives/page/3/index.html +48 -0
- package/article/10047.html +148 -0
- package/article/10164.html +64 -0
- package/article/10624.html +436 -0
- package/article/10745.html +586 -0
- package/article/11674.html +71 -0
- package/article/11939.html +72 -0
- package/article/12238.html +86 -0
- package/article/1230.html +533 -0
- package/article/13265.html +69 -0
- package/article/13823.html +78 -0
- package/article/14125.html +72 -0
- package/article/14192.html +561 -0
- package/article/14375.html +85 -0
- package/article/14744.html +83 -0
- package/article/14936.html +451 -0
- package/article/1518.html +250 -0
- package/article/15428.html +71 -0
- package/article/15518.html +288 -0
- package/article/15569.html +418 -0
- package/article/1566.html +122 -0
- package/article/16017.html +156 -0
- package/article/16947.html +440 -0
- package/article/17096.html +82 -0
- package/article/17246.html +89 -0
- package/article/17575.html +350 -0
- package/article/179.html +757 -0
- package/article/18039.html +233 -0
- package/article/18071.html +375 -0
- package/article/18142.html +71 -0
- package/article/19909.html +160 -0
- package/article/20014.html +89 -0
- package/article/20021.html +389 -0
- package/article/20037.html +280 -0
- package/article/20056.html +95 -0
- package/article/20093.html +404 -0
- package/article/2021.html +607 -0
- package/article/20459.html +115 -0
- package/article/20613.html +263 -0
- package/article/20635.html +71 -0
- package/article/21317.html +71 -0
- package/article/21320.html +90 -0
- package/article/21782.html +548 -0
- package/article/22230.html +435 -0
- package/article/22237.html +347 -0
- package/article/22398.html +109 -0
- package/article/22422.html +270 -0
- package/article/22565.html +300 -0
- package/article/23046.html +250 -0
- package/article/23083.html +215 -0
- package/article/23195.html +297 -0
- package/article/23301.html +835 -0
- package/article/23589.html +285 -0
- package/article/23655.html +338 -0
- package/article/23864.html +76 -0
- package/article/23914.html +96 -0
- package/article/24169.html +135 -0
- package/article/24581.html +349 -0
- package/article/2475.html +500 -0
- package/article/24826.html +77 -0
- package/article/24924.html +247 -0
- package/article/25164.html +1495 -0
- package/article/25318.html +394 -0
- package/article/25710.html +1129 -0
- package/article/25734.html +83 -0
- package/article/26083.html +174 -0
- package/article/26147.html +283 -0
- package/article/26291.html +110 -0
- package/article/26354.html +71 -0
- package/article/26624.html +145 -0
- package/article/26639.html +298 -0
- package/article/26850.html +138 -0
- package/article/26940.html +258 -0
- package/article/27796.html +190 -0
- package/article/27800.html +161 -0
- package/article/28963.html +159 -0
- package/article/28976.html +247 -0
- package/article/29042.html +72 -0
- package/article/29596.html +81 -0
- package/article/29619.html +183 -0
- package/article/29623.html +329 -0
- package/article/29829.html +205 -0
- package/article/29abbd1c.html +112 -0
- package/article/30215.html +178 -0
- package/article/30552.html +78 -0
- package/article/30818.html +201 -0
- package/article/31330.html +364 -0
- package/article/3154.html +577 -0
- package/article/31695.html +348 -0
- package/article/31826.html +71 -0
- package/article/31843.html +132 -0
- package/article/32280.html +212 -0
- package/article/32431.html +74 -0
- package/article/32443.html +72 -0
- package/article/32732.html +122 -0
- package/article/3286.html +251 -0
- package/article/32960.html +198 -0
- package/article/33713.html +72 -0
- package/article/33899.html +615 -0
- package/article/34351.html +74 -0
- package/article/34372.html +89 -0
- package/article/34410.html +74 -0
- package/article/34431.html +118 -0
- package/article/3447.html +75 -0
- package/article/34474.html +142 -0
- package/article/34871.html +147 -0
- package/article/35397.html +175 -0
- package/article/3544.html +199 -0
- package/article/35503.html +115 -0
- package/article/35624.html +84 -0
- package/article/35697.html +384 -0
- package/article/35863.html +73 -0
- package/article/36037.html +253 -0
- package/article/36118.html +71 -0
- package/article/3621.html +119 -0
- package/article/36251.html +296 -0
- package/article/36642.html +352 -0
- package/article/37102.html +763 -0
- package/article/37336.html +351 -0
- package/article/37351.html +89 -0
- package/article/3760.html +294 -0
- package/article/37749.html +75 -0
- package/article/37789.html +83 -0
- package/article/38005.html +765 -0
- package/article/38009.html +284 -0
- package/article/38269.html +194 -0
- package/article/38344.html +88 -0
- package/article/38359.html +334 -0
- package/article/38423.html +379 -0
- package/article/38530.html +213 -0
- package/article/38743.html +268 -0
- package/article/38753.html +204 -0
- package/article/38881.html +71 -0
- package/article/39087.html +414 -0
- package/article/39309.html +84 -0
- package/article/39486.html +74 -0
- package/article/39637.html +306 -0
- package/article/39839.html +72 -0
- package/article/39937.html +152 -0
- package/article/39970.html +71 -0
- package/article/402.html +559 -0
- package/article/40698.html +71 -0
- package/article/40811.html +71 -0
- package/article/40964.html +462 -0
- package/article/41011.html +322 -0
- package/article/41152.html +78 -0
- package/article/41696.html +71 -0
- package/article/41717.html +281 -0
- package/article/41777.html +149 -0
- package/article/419.html +985 -0
- package/article/4233.html +136 -0
- package/article/4292.html +86 -0
- package/article/43302.html +96 -0
- package/article/43397.html +106 -0
- package/article/43724.html +281 -0
- package/article/43999.html +224 -0
- package/article/44426.html +77 -0
- package/article/44964.html +137 -0
- package/article/45004.html +123 -0
- package/article/4510.html +83 -0
- package/article/45156.html +320 -0
- package/article/45157.html +52 -0
- package/article/45267.html +87 -0
- package/article/45641.html +207 -0
- package/article/45960.html +75 -0
- package/article/46100.html +1262 -0
- package/article/46366.html +74 -0
- package/article/46771.html +96 -0
- package/article/46911.html +517 -0
- package/article/46948.html +137 -0
- package/article/46ee4850.html +349 -0
- package/article/47019.html +84 -0
- package/article/47532.html +94 -0
- package/article/4783.html +429 -0
- package/article/47972.html +72 -0
- package/article/48216.html +127 -0
- package/article/48252.html +185 -0
- package/article/48520.html +74 -0
- package/article/48722.html +75 -0
- package/article/48807.html +99 -0
- package/article/49126.html +323 -0
- package/article/50001.html +88 -0
- package/article/50058.html +151 -0
- package/article/50343.html +410 -0
- package/article/50510.html +82 -0
- package/article/51082.html +98 -0
- package/article/51677.html +111 -0
- package/article/5204.html +1085 -0
- package/article/52500.html +538 -0
- package/article/52689.html +259 -0
- package/article/52877.html +569 -0
- package/article/53125.html +191 -0
- package/article/53428.html +251 -0
- package/article/53524.html +74 -0
- package/article/53698.html +322 -0
- package/article/53803e6.html +93 -0
- package/article/53924.html +291 -0
- package/article/53962.html +253 -0
- package/article/54006.html +71 -0
- package/article/54018.html +88 -0
- package/article/54161.html +83 -0
- package/article/54178.html +69 -0
- package/article/54258.html +327 -0
- package/article/54295.html +214 -0
- package/article/54313.html +1976 -0
- package/article/54351.html +90 -0
- package/article/54604.html +80 -0
- package/article/54632.html +71 -0
- package/article/54912.html +756 -0
- package/article/54918.html +129 -0
- package/article/55119.html +136 -0
- package/article/55756.html +118 -0
- package/article/55769.html +136 -0
- package/article/55870.html +161 -0
- package/article/56139.html +92 -0
- package/article/56557.html +69 -0
- package/article/56604.html +69 -0
- package/article/56816.html +266 -0
- package/article/56926.html +153 -0
- package/article/57747.html +409 -0
- package/article/57965.html +475 -0
- package/article/58816.html +78 -0
- package/article/59059.html +435 -0
- package/article/59095.html +350 -0
- package/article/59349.html +244 -0
- package/article/59402.html +216 -0
- package/article/59448.html +55 -0
- package/article/59870.html +94 -0
- package/article/59877.html +208 -0
- package/article/5dbb6f41.html +86 -0
- package/article/6008.html +75 -0
- package/article/60327.html +126 -0
- package/article/6035.html +76 -0
- package/article/60428.html +71 -0
- package/article/60544.html +128 -0
- package/article/61319.html +95 -0
- package/article/61367.html +93 -0
- package/article/624d1918.html +292 -0
- package/article/62543.html +71 -0
- package/article/62887.html +169 -0
- package/article/63074.html +120 -0
- package/article/63266.html +311 -0
- package/article/63351.html +74 -0
- package/article/63542.html +104 -0
- package/article/63824.html +275 -0
- package/article/64051.html +653 -0
- package/article/64189b69.html +72 -0
- package/article/64354.html +75 -0
- package/article/64869.html +79 -0
- package/article/64923.html +596 -0
- package/article/65128.html +95 -0
- package/article/65295.html +79 -0
- package/article/6888.html +75 -0
- package/article/7065.html +84 -0
- package/article/7455.html +85 -0
- package/article/7a3ef8f.html +315 -0
- package/article/8140.html +188 -0
- package/article/8190.html +85 -0
- package/article/8225.html +78 -0
- package/article/84c9ccd6.html +159 -0
- package/article/8f9a9ae3.html +82 -0
- package/article/9174.html +73 -0
- package/article/9738.html +294 -0
- package/article/a4145266.html +71 -0
- package/article/bedea419.html +72 -0
- package/article/bf7e7421.html +78 -0
- package/article/c1867fbf.html +103 -0
- package/article/c5576490.html +70 -0
- package/article/dcb0db28.html +76 -0
- package/article/fc3b727a.html +79 -0
- package/atom.xml +445 -0
- package/baidusitemap.xml +1079 -0
- package/blocks/dns.txt +264 -0
- package/blocks/filter.txt +1070 -0
- package/blocks/script.js +42 -0
- package/categories/CDN/index.html +48 -0
- package/categories/IDE/index.html +48 -0
- package/categories/git/index.html +48 -0
- package/categories/hexo/index.html +48 -0
- package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +48 -0
- package/categories//345/210/206/344/272/253/index.html +48 -0
- package/categories//345/211/215/347/253/257/index.html +48 -0
- package/categories//345/211/215/347/253/257/page/2/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250//347/275/221/347/273/234/345/215/217/350/256/256/index.html +48 -0
- package/categories//345/215/232/345/256/242/index.html +48 -0
- package/categories//345/267/245/345/205/267/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244//350/247/206/351/242/221/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +48 -0
- package/categories//346/255/243/345/210/231/index.html +48 -0
- package/categories//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//347/256/227/346/263/225/index.html +48 -0
- package/categories//350/265/204/350/256/257/index.html +48 -0
- package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +48 -0
- package/cdn/css/font-awesome.min.css +4 -0
- package/cdn/css/grids-responsive-min.css +7 -0
- package/cdn/css/normalize.css +349 -0
- package/cdn/css/pure-min.css +11 -0
- package/cdn/fonts/fontawesome-webfont.eot +0 -0
- package/cdn/fonts/fontawesome-webfont.svg +2671 -0
- package/cdn/fonts/fontawesome-webfont.ttf +0 -0
- package/cdn/fonts/fontawesome-webfont.woff +0 -0
- package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
- package/cdn/js/Valine.min.js +17 -0
- package/cdn/js/canvas-nest.js +1 -0
- package/cdn/js/clipboard.min.js +7 -0
- package/cdn/js/crypto-js.js +25 -0
- package/cdn/js/jquery.min.js +2 -0
- package/css/default.css +1144 -0
- package/css/donate.css +338 -0
- package/css/hbe.style.css +749 -0
- package/css/style.css +2095 -0
- package/donate/index.html +39 -0
- package/google917dcf72f6e5c7f5.html +1 -0
- package/guestbook/index.html +68 -0
- package/hosts/ads.txt +149 -0
- package/hosts/flash.txt +9 -0
- package/hosts/github.txt +6 -0
- package/hosts/google.txt +16936 -0
- package/hosts/winrar.txt +2 -0
- package/img/alipay.svg +46 -0
- package/img/bitcoin.svg +135 -0
- package/img/blog.ico +0 -0
- package/img/blog.png +0 -0
- package/img/gaba.png +0 -0
- package/img/github.svg +1 -0
- package/img/like.svg +1 -0
- package/img/mp-mini.jpg +0 -0
- package/img/mp.png +0 -0
- package/img/paypal.svg +63 -0
- package/img/upy_logo.svg +59 -0
- package/img/wechat.svg +49 -0
- package/index.html +48 -0
- package/jd_root.txt +1 -0
- package/js/codeblock-resizer.js +51 -0
- package/js/dark.js +12 -0
- package/js/donate.js +87 -0
- package/js/fixedPage.js +106 -0
- package/js/gitment.browser.js +3751 -0
- package/js/search.js +86 -0
- package/js/share.js +60 -0
- package/js/smartresize.js +32 -0
- package/js/totop.js +12 -0
- package/kankan/index.html +77 -0
- package/lib/hbe.js +293 -0
- package/package.json +25 -0
- package/page/10/index.html +49 -0
- package/page/11/index.html +59 -0
- package/page/12/index.html +67 -0
- package/page/13/index.html +63 -0
- package/page/14/index.html +66 -0
- package/page/15/index.html +60 -0
- package/page/16/index.html +60 -0
- package/page/17/index.html +62 -0
- package/page/18/index.html +61 -0
- package/page/19/index.html +58 -0
- package/page/2/index.html +48 -0
- package/page/20/index.html +57 -0
- package/page/21/index.html +61 -0
- package/page/22/index.html +55 -0
- package/page/23/index.html +64 -0
- package/page/24/index.html +60 -0
- package/page/25/index.html +58 -0
- package/page/26/index.html +48 -0
- package/page/27/index.html +58 -0
- package/page/3/index.html +48 -0
- package/page/4/index.html +48 -0
- package/page/5/index.html +51 -0
- package/page/6/index.html +51 -0
- package/page/7/index.html +51 -0
- package/page/8/index.html +53 -0
- package/page/9/index.html +48 -0
- package/randomcall/README.html +1 -0
- package/randomcall/lucker.html +290 -0
- package/randomcall/lucky.png +0 -0
- package/robots.txt +22 -0
- package/search.xml +6740 -0
- package/sitemap.xml +2669 -0
- package/tags//345/216/237/345/210/233/index.html +48 -0
- package/tags//345/250/261/344/271/220/index.html +48 -0
- package/tags//346/211/213/345/206/231/index.html +48 -0
- package/tags//347/226/253/346/203/205/index.html +48 -0
- package/tags//350/275/254/350/275/275/index.html +48 -0
- package/tags//350/275/254/350/275/275/page/2/index.html +48 -0
- package/v.html +90 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>使用node运行electron时报Error: spawn electron-forge ENOENT解决办法 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
+
var bp = document.createElement('script');
|
|
3
|
+
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
+
if (curProtocol === 'https'){
|
|
5
|
+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
+
}
|
|
7
|
+
else{
|
|
8
|
+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
+
}
|
|
10
|
+
var s = document.getElementsByTagName("script")[0];
|
|
11
|
+
s.parentNode.insertBefore(bp, s);
|
|
12
|
+
})();
|
|
13
|
+
</script><script>(function(){
|
|
14
|
+
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
+
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
+
})();
|
|
17
|
+
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
+
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">使用node运行electron时报Error: spawn electron-forge ENOENT解决办法</h1><div class="post-meta"><span class="date">2019-10-26</span><span> | </span><span class="tag original"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 34</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 1</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/58816.html#vcomment"><span class="waline-comment-count" data-path="/article/58816.html"></span><span> 条评论</span></a><div class="post-content"><blockquote>
|
|
20
|
+
<p>使用Node运行electron时报Error: spawn electron-forge ENOENT解决办法</p>
|
|
21
|
+
</blockquote>
|
|
22
|
+
<span id="more"></span>
|
|
23
|
+
|
|
24
|
+
<ul>
|
|
25
|
+
<li>原因是找不到模块electron-forge</li>
|
|
26
|
+
<li>解决办法:<br> <code>npm i electron-forge -S</code></li>
|
|
27
|
+
</ul>
|
|
28
|
+
<hr>
|
|
29
|
+
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/58816.html">https://xuehuayu.cn/article/58816.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创</a></div><div class="post-nav"><a class="pre" href="/article/31826.html">Electron 7.0.0 发布</a><a class="next" href="/article/45156.html">重磅!TypeScript 3.7 RC发布</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
30
|
+
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
31
|
+
const locale = {
|
|
32
|
+
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
33
|
+
sofa: '沙发空缺中,还不快抢~',
|
|
34
|
+
};
|
|
35
|
+
Waline.init({
|
|
36
|
+
el: '#vcomment',
|
|
37
|
+
serverURL: serverURL,
|
|
38
|
+
pageSize: '20',
|
|
39
|
+
visitor: true, // 阅读量统计
|
|
40
|
+
requiredMeta: ['nick', 'mail'],
|
|
41
|
+
emoji: [
|
|
42
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
43
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
44
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
45
|
+
],
|
|
46
|
+
locale,
|
|
47
|
+
pageview: true
|
|
48
|
+
})
|
|
49
|
+
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
50
|
+
var val = $(this).val()
|
|
51
|
+
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
52
|
+
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
53
|
+
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
54
|
+
|
|
55
|
+
if (val === 'self') {
|
|
56
|
+
$('#search').html(self)
|
|
57
|
+
var search_path = 'search.xml';
|
|
58
|
+
if (search_path.length == 0) {
|
|
59
|
+
search_path = 'search.xml';
|
|
60
|
+
}
|
|
61
|
+
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
62
|
+
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
63
|
+
} else if (val === 'baidu') {
|
|
64
|
+
$('#search').html(baidu)
|
|
65
|
+
} else if (val === 'google') {
|
|
66
|
+
$('#search').html(google)
|
|
67
|
+
}
|
|
68
|
+
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
69
|
+
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
70
|
+
if (cnb) {
|
|
71
|
+
var gxba =document.getElementById('gxba')
|
|
72
|
+
var gaba =document.getElementById('gaba')
|
|
73
|
+
var gabaLink =document.getElementById('gaba-link')
|
|
74
|
+
gxba.innerText ='京ICP备20007647号-1'
|
|
75
|
+
gaba.innerText ='京公网安备 11010802031254号'
|
|
76
|
+
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
77
|
+
}
|
|
78
|
+
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>20道JS原理题助你面试一臂之力! | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
+
var bp = document.createElement('script');
|
|
3
|
+
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
+
if (curProtocol === 'https'){
|
|
5
|
+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
+
}
|
|
7
|
+
else{
|
|
8
|
+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
+
}
|
|
10
|
+
var s = document.getElementsByTagName("script")[0];
|
|
11
|
+
s.parentNode.insertBefore(bp, s);
|
|
12
|
+
})();
|
|
13
|
+
</script><script>(function(){
|
|
14
|
+
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
+
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
+
})();
|
|
17
|
+
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
+
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">20道JS原理题助你面试一臂之力!</h1><div class="post-meta"><span class="date">2019-12-02</span><span> | </span><span class="tag"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 2.4k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 12</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/59059.html#vcomment"><span class="waline-comment-count" data-path="/article/59059.html"></span><span> 条评论</span></a><div class="post-content"><p><code>原文地址:https://juejin.im/post/5d2ee123e51d4577614761f8</code></p>
|
|
20
|
+
<p>本文针对目前常见的面试题,仅提供了相应的核心原理及思路,部分边界细节未处理。后续会持续更新,希望对你有所帮助。</p>
|
|
21
|
+
<span id="more"></span>
|
|
22
|
+
|
|
23
|
+
<h2 id="1-实现一个call函数"><a href="#1-实现一个call函数" class="headerlink" title="1. 实现一个call函数"></a>1. 实现一个call函数</h2><pre><code>// 思路:将要改变this指向的方法挂到目标this上执行并返回Function.prototype.mycall = function (context) {
|
|
24
|
+
if (typeofthis !== 'function') {
|
|
25
|
+
thrownewTypeError('not funciton')
|
|
26
|
+
}
|
|
27
|
+
context = context || window
|
|
28
|
+
context.fn = thislet arg = [...arguments].slice(1)
|
|
29
|
+
let result = context.fn(...arg)
|
|
30
|
+
delete context.fn
|
|
31
|
+
return result
|
|
32
|
+
}
|
|
33
|
+
复制代码
|
|
34
|
+
</code></pre>
|
|
35
|
+
<h2 id="2-实现一个apply函数"><a href="#2-实现一个apply函数" class="headerlink" title="2. 实现一个apply函数"></a>2. 实现一个apply函数</h2><pre><code>// 思路:将要改变this指向的方法挂到目标this上执行并返回Function.prototype.myapply = function (context) {
|
|
36
|
+
if (typeofthis !== 'function') {
|
|
37
|
+
thrownewTypeError('not funciton')
|
|
38
|
+
}
|
|
39
|
+
context = context || window
|
|
40
|
+
context.fn = thislet result
|
|
41
|
+
if (arguments[1]) {
|
|
42
|
+
result = context.fn(...arguments[1])
|
|
43
|
+
} else {
|
|
44
|
+
result = context.fn()
|
|
45
|
+
}
|
|
46
|
+
delete context.fn
|
|
47
|
+
return result
|
|
48
|
+
}
|
|
49
|
+
复制代码
|
|
50
|
+
</code></pre>
|
|
51
|
+
<h2 id="3-实现一个bind函数"><a href="#3-实现一个bind函数" class="headerlink" title="3. 实现一个bind函数"></a>3. 实现一个bind函数</h2><pre><code>// 思路:类似call,但返回的是函数Function.prototype.mybind = function (context) {
|
|
52
|
+
if (typeofthis !== 'function') {
|
|
53
|
+
thrownewTypeError('Error')
|
|
54
|
+
}
|
|
55
|
+
let _this = thislet arg = [...arguments].slice(1)
|
|
56
|
+
returnfunctionF() {
|
|
57
|
+
// 处理函数使用new的情况if (thisinstanceof F) {
|
|
58
|
+
returnnew _this(...arg, ...arguments)
|
|
59
|
+
} else {
|
|
60
|
+
return _this.apply(context, arg.concat(...arguments))
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
复制代码
|
|
65
|
+
</code></pre>
|
|
66
|
+
<h2 id="4-instanceof的原理"><a href="#4-instanceof的原理" class="headerlink" title="4. instanceof的原理"></a>4. instanceof的原理</h2><pre><code>// 思路:右边变量的原型存在于左边变量的原型链上functioninstanceOf(left, right) {
|
|
67
|
+
let leftValue = left.__proto__
|
|
68
|
+
let rightValue = right.prototype
|
|
69
|
+
while (true) {
|
|
70
|
+
if (leftValue === null) {
|
|
71
|
+
returnfalse
|
|
72
|
+
}
|
|
73
|
+
if (leftValue === rightValue) {
|
|
74
|
+
return true
|
|
75
|
+
}
|
|
76
|
+
leftValue = leftValue.__proto__
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
复制代码
|
|
80
|
+
</code></pre>
|
|
81
|
+
<h2 id="5-Object-create的基本实现原理"><a href="#5-Object-create的基本实现原理" class="headerlink" title="5. Object.create的基本实现原理"></a>5. Object.create的基本实现原理</h2><pre><code>// 思路:将传入的对象作为原型functioncreate(obj) {
|
|
82
|
+
functionF() {}
|
|
83
|
+
F.prototype = obj
|
|
84
|
+
returnnew F()
|
|
85
|
+
}
|
|
86
|
+
复制代码
|
|
87
|
+
</code></pre>
|
|
88
|
+
<h2 id="6-new本质"><a href="#6-new本质" class="headerlink" title="6. new本质"></a>6. new本质</h2><pre><code>functionmyNew (fun) {
|
|
89
|
+
returnfunction () {
|
|
90
|
+
// 创建一个新对象且将其隐式原型指向构造函数原型let obj = {
|
|
91
|
+
__proto__ : fun.prototype
|
|
92
|
+
}
|
|
93
|
+
// 执行构造函数
|
|
94
|
+
fun.call(obj, ...arguments)
|
|
95
|
+
// 返回该对象return obj
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
functionperson(name, age) {
|
|
100
|
+
this.name = name
|
|
101
|
+
this.age = age
|
|
102
|
+
}
|
|
103
|
+
let obj = myNew(person)('chen', 18) // {name: "chen", age: 18}复制代码
|
|
104
|
+
</code></pre>
|
|
105
|
+
<h2 id="7-实现一个基本的Promise"><a href="#7-实现一个基本的Promise" class="headerlink" title="7. 实现一个基本的Promise"></a>7. 实现一个基本的Promise</h2><pre><code>// 未添加异步处理等其他边界情况// ①自动执行函数,②三个状态,③thenclassPromise{
|
|
106
|
+
constructor (fn) {
|
|
107
|
+
// 三个状态this.state = 'pending'this.value = undefinedthis.reason = undefinedlet resolve = value => {
|
|
108
|
+
if (this.state === 'pending') {
|
|
109
|
+
this.state = 'fulfilled'this.value = value
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
let reject = value => {
|
|
113
|
+
if (this.state === 'pending') {
|
|
114
|
+
this.state = 'rejected'this.reason = value
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// 自动执行函数try {
|
|
118
|
+
fn(resolve, reject)
|
|
119
|
+
} catch (e) {
|
|
120
|
+
reject(e)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// then
|
|
124
|
+
then(onFulfilled, onRejected) {
|
|
125
|
+
switch (this.state) {
|
|
126
|
+
case'fulfilled':
|
|
127
|
+
onFulfilled()
|
|
128
|
+
breakcase'rejected':
|
|
129
|
+
onRejected()
|
|
130
|
+
breakdefault:
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
复制代码
|
|
135
|
+
</code></pre>
|
|
136
|
+
<h2 id="8-实现浅拷贝"><a href="#8-实现浅拷贝" class="headerlink" title="8. 实现浅拷贝"></a>8. 实现浅拷贝</h2><pre><code>// 1. ...实现let copy1 = {...{x:1} }
|
|
137
|
+
|
|
138
|
+
// 2. Object.assign实现let copy2 = Object.assign({}, {x:1})
|
|
139
|
+
复制代码
|
|
140
|
+
</code></pre>
|
|
141
|
+
<h2 id="9-实现一个基本的深拷贝"><a href="#9-实现一个基本的深拷贝" class="headerlink" title="9. 实现一个基本的深拷贝"></a>9. 实现一个基本的深拷贝</h2><pre><code>// 1. JOSN.stringify()/JSON.parse()let obj = {a: 1, b: {x: 3} }
|
|
142
|
+
JSON.parse(JSON.stringify(obj))
|
|
143
|
+
|
|
144
|
+
// 2. 递归拷贝functiondeepClone(obj) {
|
|
145
|
+
let copy = obj instanceofArray ? [] : {}
|
|
146
|
+
for (let i in obj) {
|
|
147
|
+
if (obj.hasOwnProperty(i)) {
|
|
148
|
+
copy[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i]
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return copy
|
|
152
|
+
}
|
|
153
|
+
复制代码
|
|
154
|
+
</code></pre>
|
|
155
|
+
<h2 id="10-使用setTimeout模拟setInterval"><a href="#10-使用setTimeout模拟setInterval" class="headerlink" title="10. 使用setTimeout模拟setInterval"></a>10. 使用setTimeout模拟setInterval</h2><pre><code>// 可避免setInterval因执行时间导致的间隔执行时间不一致
|
|
156
|
+
setTimeout (function () {
|
|
157
|
+
// do something
|
|
158
|
+
setTimeout (arguments.callee, 500)
|
|
159
|
+
}, 500)
|
|
160
|
+
复制代码
|
|
161
|
+
</code></pre>
|
|
162
|
+
<h2 id="11-js实现一个继承方法"><a href="#11-js实现一个继承方法" class="headerlink" title="11. js实现一个继承方法"></a>11. js实现一个继承方法</h2><pre><code>// 借用构造函数继承实例属性functionChild () {
|
|
163
|
+
Parent.call(this)
|
|
164
|
+
}
|
|
165
|
+
// 寄生继承原型属性
|
|
166
|
+
(function () {
|
|
167
|
+
let Super = function () {}
|
|
168
|
+
Super.prototype = Parent.prototype
|
|
169
|
+
Child.prototype = new Super()
|
|
170
|
+
})()
|
|
171
|
+
复制代码
|
|
172
|
+
</code></pre>
|
|
173
|
+
<h2 id="12-实现一个基本的Event-Bus"><a href="#12-实现一个基本的Event-Bus" class="headerlink" title="12. 实现一个基本的Event Bus"></a>12. 实现一个基本的Event Bus</h2><pre><code>// 组件通信,一个触发与监听的过程classEventEmitter{
|
|
174
|
+
constructor () {
|
|
175
|
+
// 存储事件this.events = this.events || newMap()
|
|
176
|
+
}
|
|
177
|
+
// 监听事件
|
|
178
|
+
addListener (type, fn) {
|
|
179
|
+
if (!this.events.get(type)) {
|
|
180
|
+
this.events.set(type, fn)
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// 触发事件
|
|
184
|
+
emit (type) {
|
|
185
|
+
let handle = this.events.get(type)
|
|
186
|
+
handle.apply(this, [...arguments].slice(1))
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// 测试let emitter = new EventEmitter()
|
|
191
|
+
// 监听事件
|
|
192
|
+
emitter.addListener('ages', age => {
|
|
193
|
+
console.log(age)
|
|
194
|
+
})
|
|
195
|
+
// 触发事件
|
|
196
|
+
emitter.emit('ages', 18) // 18复制代码
|
|
197
|
+
</code></pre>
|
|
198
|
+
<h2 id="13-实现一个双向数据绑定"><a href="#13-实现一个双向数据绑定" class="headerlink" title="13. 实现一个双向数据绑定"></a>13. 实现一个双向数据绑定</h2><pre><code>let obj = {}
|
|
199
|
+
let input = document.getElementById('input')
|
|
200
|
+
let span = document.getElementById('span')
|
|
201
|
+
// 数据劫持Object.defineProperty(obj, 'text', {
|
|
202
|
+
configurable: true,
|
|
203
|
+
enumerable: true,
|
|
204
|
+
get() {
|
|
205
|
+
console.log('获取数据了')
|
|
206
|
+
},
|
|
207
|
+
set(newVal) {
|
|
208
|
+
console.log('数据更新了')
|
|
209
|
+
input.value = newVal
|
|
210
|
+
span.innerHTML = newVal
|
|
211
|
+
}
|
|
212
|
+
})
|
|
213
|
+
// 输入监听
|
|
214
|
+
input.addEventListener('keyup', function(e) {
|
|
215
|
+
obj.text = e.target.value
|
|
216
|
+
})
|
|
217
|
+
复制代码
|
|
218
|
+
</code></pre>
|
|
219
|
+
<p>完整实现可前往之前写的:<a target="_blank" rel="noopener" href="https://juejin.im/post/5d26e368e51d4577407b1dd7">这应该是最详细的响应式系统讲解了</a></p>
|
|
220
|
+
<h2 id="14-实现一个简单路由"><a href="#14-实现一个简单路由" class="headerlink" title="14. 实现一个简单路由"></a>14. 实现一个简单路由</h2><pre><code>// hash路由classRoute{
|
|
221
|
+
constructor(){
|
|
222
|
+
// 路由存储对象this.routes = {}
|
|
223
|
+
// 当前hashthis.currentHash = ''// 绑定this,避免监听时this指向改变this.freshRoute = this.freshRoute.bind(this)
|
|
224
|
+
// 监听window.addEventListener('load', this.freshRoute, false)
|
|
225
|
+
window.addEventListener('hashchange', this.freshRoute, false)
|
|
226
|
+
}
|
|
227
|
+
// 存储
|
|
228
|
+
storeRoute (path, cb) {
|
|
229
|
+
this.routes[path] = cb || function () {}
|
|
230
|
+
}
|
|
231
|
+
// 更新
|
|
232
|
+
freshRoute () {
|
|
233
|
+
this.currentHash = location.hash.slice(1) || '/'this.routes[this.currentHash]()
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
复制代码
|
|
237
|
+
</code></pre>
|
|
238
|
+
<h2 id="15-实现懒加载"><a href="#15-实现懒加载" class="headerlink" title="15. 实现懒加载"></a>15. 实现懒加载</h2><pre><code><ul><li><imgsrc="./imgs/default.png"data="./imgs/1.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/2.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/3.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/4.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/5.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/6.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/7.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/8.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/9.png"alt=""></li><li><imgsrc="./imgs/default.png"data="./imgs/10.png"alt=""></li></ul>复制代码
|
|
239
|
+
|
|
240
|
+
let imgs = document.querySelectorAll('img')
|
|
241
|
+
// 可视区高度let clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
|
|
242
|
+
functionlazyLoad () {
|
|
243
|
+
// 滚动卷去的高度let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
|
|
244
|
+
for (let i = 0; i < imgs.length; i ++) {
|
|
245
|
+
// 图片在可视区冒出的高度let x = clientHeight + scrollTop - imgs[i].offsetTop
|
|
246
|
+
// 图片在可视区内if (x > 0 && x < clientHeight+imgs[i].height) {
|
|
247
|
+
imgs[i].src = imgs[i].getAttribute('data')
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// addEventListener('scroll', lazyLoad) or setInterval(lazyLoad, 1000)复制代码
|
|
252
|
+
</code></pre>
|
|
253
|
+
<h2 id="16-rem基本设置"><a href="#16-rem基本设置" class="headerlink" title="16. rem基本设置"></a>16. rem基本设置</h2><pre><code>// 原始配置functionsetRem () {
|
|
254
|
+
let doc = document.documentElement
|
|
255
|
+
let width = doc.getBoundingClientRect().width
|
|
256
|
+
let rem = width / 75
|
|
257
|
+
doc.style.fontSize = rem + 'px'
|
|
258
|
+
}
|
|
259
|
+
// 监听窗口变化
|
|
260
|
+
addEventListener("resize", setRem)
|
|
261
|
+
复制代码
|
|
262
|
+
</code></pre>
|
|
263
|
+
<h2 id="17-手写实现AJAX"><a href="#17-手写实现AJAX" class="headerlink" title="17. 手写实现AJAX"></a>17. 手写实现AJAX</h2><pre><code>// 1. 简单流程// 实例化let xhr = new XMLHttpRequest()
|
|
264
|
+
// 初始化
|
|
265
|
+
xhr.open(method, url, async)
|
|
266
|
+
// 发送请求
|
|
267
|
+
xhr.send(data)
|
|
268
|
+
// 设置状态变化回调处理请求结果
|
|
269
|
+
xhr.onreadystatechange = () => {
|
|
270
|
+
if (xhr.readyStatus === 4 && xhr.status === 200) {
|
|
271
|
+
console.log(xhr.responseText)
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// 2. 基于promise实现 functionajax (options) {
|
|
276
|
+
// 请求地址const url = options.url
|
|
277
|
+
// 请求方法const method = options.method.toLocaleLowerCase() || 'get'// 默认为异步trueconstasync = options.async
|
|
278
|
+
// 请求参数const data = options.data
|
|
279
|
+
// 实例化const xhr = new XMLHttpRequest()
|
|
280
|
+
// 请求超时if (options.timeout && options.timeout > 0) {
|
|
281
|
+
xhr.timeout = options.timeout
|
|
282
|
+
}
|
|
283
|
+
// 返回一个Promise实例returnnewPromise ((resolve, reject) => {
|
|
284
|
+
xhr.ontimeout = () => reject && reject('请求超时')
|
|
285
|
+
// 监听状态变化回调
|
|
286
|
+
xhr.onreadystatechange = () => {
|
|
287
|
+
if (xhr.readyState == 4) {
|
|
288
|
+
// 200-300 之间表示请求成功,304资源未变,取缓存if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
|
|
289
|
+
resolve && resolve(xhr.responseText)
|
|
290
|
+
} else {
|
|
291
|
+
reject && reject()
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// 错误回调
|
|
296
|
+
xhr.onerror = err => reject && reject(err)
|
|
297
|
+
let paramArr = []
|
|
298
|
+
let encodeData
|
|
299
|
+
// 处理请求参数if (data instanceofObject) {
|
|
300
|
+
for (let key in data) {
|
|
301
|
+
// 参数拼接需要通过 encodeURIComponent 进行编码
|
|
302
|
+
paramArr.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))
|
|
303
|
+
}
|
|
304
|
+
encodeData = paramArr.join('&')
|
|
305
|
+
}
|
|
306
|
+
// get请求拼接参数if (method === 'get') {
|
|
307
|
+
// 检测url中是否已存在 ? 及其位置const index = url.indexOf('?')
|
|
308
|
+
if (index === -1) url += '?'elseif (index !== url.length -1) url += '&'// 拼接url
|
|
309
|
+
url += encodeData
|
|
310
|
+
}
|
|
311
|
+
// 初始化
|
|
312
|
+
xhr.open(method, url, async)
|
|
313
|
+
// 发送请求if (method === 'get') xhr.send(null)
|
|
314
|
+
else {
|
|
315
|
+
// post 方式需要设置请求头
|
|
316
|
+
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8')
|
|
317
|
+
xhr.send(encodeData)
|
|
318
|
+
}
|
|
319
|
+
})
|
|
320
|
+
}
|
|
321
|
+
复制代码
|
|
322
|
+
</code></pre>
|
|
323
|
+
<h2 id="18-实现拖拽"><a href="#18-实现拖拽" class="headerlink" title="18. 实现拖拽"></a>18. 实现拖拽</h2><pre><code>window.onload = function () {
|
|
324
|
+
// drag处于绝对定位状态let drag = document.getElementById('box')
|
|
325
|
+
drag.onmousedown = function(e) {
|
|
326
|
+
var e = e || window.event
|
|
327
|
+
// 鼠标与拖拽元素边界的距离 = 鼠标与可视区边界的距离 - 拖拽元素与边界的距离let diffX = e.clientX - drag.offsetLeft
|
|
328
|
+
let diffY = e.clientY - drag.offsetTop
|
|
329
|
+
drag.onmousemove = function (e) {
|
|
330
|
+
// 拖拽元素移动的距离 = 鼠标与可视区边界的距离 - 鼠标与拖拽元素边界的距离let left = e.clientX - diffX
|
|
331
|
+
let top = e.clientY - diffY
|
|
332
|
+
// 避免拖拽出可视区if (left < 0) {
|
|
333
|
+
left = 0
|
|
334
|
+
} elseif (left > window.innerWidth - drag.offsetWidth) {
|
|
335
|
+
left = window.innerWidth - drag.offsetWidth
|
|
336
|
+
}
|
|
337
|
+
if (top < 0) {
|
|
338
|
+
top = 0
|
|
339
|
+
} elseif (top > window.innerHeight - drag.offsetHeight) {
|
|
340
|
+
top = window.innerHeight - drag.offsetHeight
|
|
341
|
+
}
|
|
342
|
+
drag.style.left = left + 'px'
|
|
343
|
+
drag.style.top = top + 'px'
|
|
344
|
+
}
|
|
345
|
+
drag.onmouseup = function (e) {
|
|
346
|
+
this.onmousemove = nullthis.onmouseup = null
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
复制代码
|
|
351
|
+
</code></pre>
|
|
352
|
+
<h2 id="19-实现一个节流函数"><a href="#19-实现一个节流函数" class="headerlink" title="19. 实现一个节流函数"></a>19. 实现一个节流函数</h2><pre><code>// 思路:在规定时间内只触发一次functionthrottle (fn, delay) {
|
|
353
|
+
// 利用闭包保存时间let prev = Date.now()
|
|
354
|
+
returnfunction () {
|
|
355
|
+
let context = thislet arg = argumentslet now = Date.now()
|
|
356
|
+
if (now - prev >= delay) {
|
|
357
|
+
fn.apply(context, arg)
|
|
358
|
+
prev = Date.now()
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
functionfn () {
|
|
364
|
+
console.log('节流')
|
|
365
|
+
}
|
|
366
|
+
addEventListener('scroll', throttle(fn, 1000))
|
|
367
|
+
复制代码
|
|
368
|
+
</code></pre>
|
|
369
|
+
<h2 id="20-实现一个防抖函数"><a href="#20-实现一个防抖函数" class="headerlink" title="20. 实现一个防抖函数"></a>20. 实现一个防抖函数</h2><pre><code>// 思路:在规定时间内未触发第二次,则执行functiondebounce (fn, delay) {
|
|
370
|
+
// 利用闭包保存定时器let timer = nullreturnfunction () {
|
|
371
|
+
let context = thislet arg = arguments// 在规定时间内再次触发会先清除定时器后再重设定时器
|
|
372
|
+
clearTimeout(timer)
|
|
373
|
+
timer = setTimeout(function () {
|
|
374
|
+
fn.apply(context, arg)
|
|
375
|
+
}, delay)
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
functionfn () {
|
|
380
|
+
console.log('防抖')
|
|
381
|
+
}
|
|
382
|
+
addEventListener('scroll', debounce(fn, 1000))
|
|
383
|
+
复制代码
|
|
384
|
+
</code></pre>
|
|
385
|
+
<h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p>后续会持续更新,欢迎关注点个赞!<br><img src="https://user-gold-cdn.xitu.io/2018/12/21/167d05bdfff953ad?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="xuehuayu.cn"></p>
|
|
386
|
+
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/59059.html">https://xuehuayu.cn/article/59059.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/29623.html">面试:在浏览器输入URL回车之后发生了什么?(超详细版)</a><a class="next" href="/article/52877.html">MVVM 双向绑定全量版整理</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
387
|
+
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
388
|
+
const locale = {
|
|
389
|
+
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
390
|
+
sofa: '沙发空缺中,还不快抢~',
|
|
391
|
+
};
|
|
392
|
+
Waline.init({
|
|
393
|
+
el: '#vcomment',
|
|
394
|
+
serverURL: serverURL,
|
|
395
|
+
pageSize: '20',
|
|
396
|
+
visitor: true, // 阅读量统计
|
|
397
|
+
requiredMeta: ['nick', 'mail'],
|
|
398
|
+
emoji: [
|
|
399
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
400
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
401
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
402
|
+
],
|
|
403
|
+
locale,
|
|
404
|
+
pageview: true
|
|
405
|
+
})
|
|
406
|
+
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
407
|
+
var val = $(this).val()
|
|
408
|
+
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
409
|
+
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
410
|
+
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
411
|
+
|
|
412
|
+
if (val === 'self') {
|
|
413
|
+
$('#search').html(self)
|
|
414
|
+
var search_path = 'search.xml';
|
|
415
|
+
if (search_path.length == 0) {
|
|
416
|
+
search_path = 'search.xml';
|
|
417
|
+
}
|
|
418
|
+
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
419
|
+
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
420
|
+
} else if (val === 'baidu') {
|
|
421
|
+
$('#search').html(baidu)
|
|
422
|
+
} else if (val === 'google') {
|
|
423
|
+
$('#search').html(google)
|
|
424
|
+
}
|
|
425
|
+
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
426
|
+
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
427
|
+
if (cnb) {
|
|
428
|
+
var gxba =document.getElementById('gxba')
|
|
429
|
+
var gaba =document.getElementById('gaba')
|
|
430
|
+
var gabaLink =document.getElementById('gaba-link')
|
|
431
|
+
gxba.innerText ='京ICP备20007647号-1'
|
|
432
|
+
gaba.innerText ='京公网安备 11010802031254号'
|
|
433
|
+
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
434
|
+
}
|
|
435
|
+
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>
|