2019_07_16_01.html 19 KB

123456789101112131415161718192021222324
  1. <!DOCTYPE html>
  2. <html lang="en-US">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>this、apply、call、bind | 看白鹿的博客</title>
  7. <meta name="description" content="只有敢于尝试,才能品味人生.">
  8. <link rel="icon" href="/logo.png">
  9. <link rel="preload" href="/assets/css/0.styles.a2e0d1a2.css" as="style"><link rel="preload" href="/assets/js/app.9558671e.js" as="script"><link rel="preload" href="/assets/js/3.515b53d6.js" as="script"><link rel="preload" href="/assets/js/92.f6e0c47a.js" as="script"><link rel="prefetch" href="/assets/js/10.f724d0ba.js"><link rel="prefetch" href="/assets/js/100.5834781e.js"><link rel="prefetch" href="/assets/js/101.21b366b3.js"><link rel="prefetch" href="/assets/js/102.2ae747f3.js"><link rel="prefetch" href="/assets/js/103.093cd825.js"><link rel="prefetch" href="/assets/js/104.22c3355f.js"><link rel="prefetch" href="/assets/js/105.0d2c6d27.js"><link rel="prefetch" href="/assets/js/106.57e86379.js"><link rel="prefetch" href="/assets/js/107.3859929f.js"><link rel="prefetch" href="/assets/js/108.305f4abf.js"><link rel="prefetch" href="/assets/js/109.bfba36ff.js"><link rel="prefetch" href="/assets/js/11.8006ec70.js"><link rel="prefetch" href="/assets/js/110.b67873d6.js"><link rel="prefetch" href="/assets/js/111.39112c80.js"><link rel="prefetch" href="/assets/js/112.6452e3ad.js"><link rel="prefetch" href="/assets/js/113.60c65ce6.js"><link rel="prefetch" href="/assets/js/114.955a027b.js"><link rel="prefetch" href="/assets/js/115.dd036aff.js"><link rel="prefetch" href="/assets/js/116.14835fbf.js"><link rel="prefetch" href="/assets/js/117.c79a8c90.js"><link rel="prefetch" href="/assets/js/118.c0e2c0d9.js"><link rel="prefetch" href="/assets/js/12.005e0dbb.js"><link rel="prefetch" href="/assets/js/13.ff4ae139.js"><link rel="prefetch" href="/assets/js/14.836a5132.js"><link rel="prefetch" href="/assets/js/15.6f048cfc.js"><link rel="prefetch" href="/assets/js/16.d91b81f0.js"><link rel="prefetch" href="/assets/js/17.f2e82e43.js"><link rel="prefetch" href="/assets/js/18.4e4cd572.js"><link rel="prefetch" href="/assets/js/19.3b203b0f.js"><link rel="prefetch" href="/assets/js/20.7a5c58ab.js"><link rel="prefetch" href="/assets/js/21.97e7a824.js"><link rel="prefetch" href="/assets/js/22.c2c71341.js"><link rel="prefetch" href="/assets/js/23.af6cefca.js"><link rel="prefetch" href="/assets/js/24.8a375cba.js"><link rel="prefetch" href="/assets/js/25.238ba08c.js"><link rel="prefetch" href="/assets/js/26.9c2191ba.js"><link rel="prefetch" href="/assets/js/27.aa86acfc.js"><link rel="prefetch" href="/assets/js/28.858301d1.js"><link rel="prefetch" href="/assets/js/29.808ea0c3.js"><link rel="prefetch" href="/assets/js/30.e9907d4a.js"><link rel="prefetch" href="/assets/js/31.c87c923f.js"><link rel="prefetch" href="/assets/js/32.4b1edff8.js"><link rel="prefetch" href="/assets/js/33.73f494d0.js"><link rel="prefetch" href="/assets/js/34.50a183ad.js"><link rel="prefetch" href="/assets/js/35.7df7ce1e.js"><link rel="prefetch" href="/assets/js/36.349910a5.js"><link rel="prefetch" href="/assets/js/37.d0f9f5f8.js"><link rel="prefetch" href="/assets/js/38.fb3a1bd1.js"><link rel="prefetch" href="/assets/js/39.601de504.js"><link rel="prefetch" href="/assets/js/4.389f8161.js"><link rel="prefetch" href="/assets/js/40.08558ea8.js"><link rel="prefetch" href="/assets/js/41.9cab78b4.js"><link rel="prefetch" href="/assets/js/42.570f67c5.js"><link rel="prefetch" href="/assets/js/43.41766314.js"><link rel="prefetch" href="/assets/js/44.61865afc.js"><link rel="prefetch" href="/assets/js/45.b4d6c042.js"><link rel="prefetch" href="/assets/js/46.ab1face5.js"><link rel="prefetch" href="/assets/js/47.cfc26f59.js"><link rel="prefetch" href="/assets/js/48.b14654a7.js"><link rel="prefetch" href="/assets/js/49.6598379f.js"><link rel="prefetch" href="/assets/js/5.d4651190.js"><link rel="prefetch" href="/assets/js/50.1278be5c.js"><link rel="prefetch" href="/assets/js/51.7fd917c5.js"><link rel="prefetch" href="/assets/js/52.25b15acf.js"><link rel="prefetch" href="/assets/js/53.2e62bed5.js"><link rel="prefetch" href="/assets/js/54.af31649a.js"><link rel="prefetch" href="/assets/js/55.e6c76277.js"><link rel="prefetch" href="/assets/js/56.59b2e0fa.js"><link rel="prefetch" href="/assets/js/57.e75a4f7d.js"><link rel="prefetch" href="/assets/js/58.f45feb68.js"><link rel="prefetch" href="/assets/js/59.21a7b545.js"><link rel="prefetch" href="/assets/js/6.4bfb03ad.js"><link rel="prefetch" href="/assets/js/60.d5bd9a2b.js"><link rel="prefetch" href="/assets/js/61.dc32bd44.js"><link rel="prefetch" href="/assets/js/62.552676dd.js"><link rel="prefetch" href="/assets/js/63.86db7a84.js"><link rel="prefetch" href="/assets/js/64.eb8d2554.js"><link rel="prefetch" href="/assets/js/65.405a53d2.js"><link rel="prefetch" href="/assets/js/66.a56465a2.js"><link rel="prefetch" href="/assets/js/67.8184d78b.js"><link rel="prefetch" href="/assets/js/68.c56c64fe.js"><link rel="prefetch" href="/assets/js/69.6b654ce5.js"><link rel="prefetch" href="/assets/js/7.5373c3ff.js"><link rel="prefetch" href="/assets/js/70.9a186317.js"><link rel="prefetch" href="/assets/js/71.ac0a8a64.js"><link rel="prefetch" href="/assets/js/72.b10eb62e.js"><link rel="prefetch" href="/assets/js/73.8d0ed403.js"><link rel="prefetch" href="/assets/js/74.903a6ec9.js"><link rel="prefetch" href="/assets/js/75.b4770f9b.js"><link rel="prefetch" href="/assets/js/76.38bc39a3.js"><link rel="prefetch" href="/assets/js/77.f9865d6b.js"><link rel="prefetch" href="/assets/js/78.10f6bd6c.js"><link rel="prefetch" href="/assets/js/79.a9255312.js"><link rel="prefetch" href="/assets/js/8.be3a48f4.js"><link rel="prefetch" href="/assets/js/80.02b17ee8.js"><link rel="prefetch" href="/assets/js/81.a1112357.js"><link rel="prefetch" href="/assets/js/82.4568ca67.js"><link rel="prefetch" href="/assets/js/83.49710233.js"><link rel="prefetch" href="/assets/js/84.533366f2.js"><link rel="prefetch" href="/assets/js/85.97dbc2cd.js"><link rel="prefetch" href="/assets/js/86.6514a49a.js"><link rel="prefetch" href="/assets/js/87.0c59077d.js"><link rel="prefetch" href="/assets/js/88.1df289b4.js"><link rel="prefetch" href="/assets/js/89.7269909c.js"><link rel="prefetch" href="/assets/js/9.db31af68.js"><link rel="prefetch" href="/assets/js/90.272a0e37.js"><link rel="prefetch" href="/assets/js/91.72195388.js"><link rel="prefetch" href="/assets/js/93.36e0cacd.js"><link rel="prefetch" href="/assets/js/94.f5c4f682.js"><link rel="prefetch" href="/assets/js/95.8408e244.js"><link rel="prefetch" href="/assets/js/96.a71354b0.js"><link rel="prefetch" href="/assets/js/97.4fb8b67b.js"><link rel="prefetch" href="/assets/js/98.785be908.js"><link rel="prefetch" href="/assets/js/99.219eebc3.js"><link rel="prefetch" href="/assets/js/vendors~docsearch.431cfe91.js">
  10. <link rel="stylesheet" href="/assets/css/0.styles.a2e0d1a2.css">
  11. </head>
  12. <body>
  13. <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">看白鹿的博客</span></a> <div class="links"><form id="search-form" role="search" class="algolia-search-wrapper search-box"><input id="algolia-search-input" class="search-query"></form> <nav class="nav-links can-hide"><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="前端" class="dropdown-title"><span class="title">前端</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/CSS/" class="nav-link">CSS</a></li><li class="dropdown-item"><!----> <a href="/FLUTTER/" class="nav-link">flutter</a></li><li class="dropdown-item"><!----> <a href="/GIT/" class="nav-link">GIT</a></li><li class="dropdown-item"><!----> <a href="/JavaScript/" class="nav-link router-link-active">JavaScript</a></li><li class="dropdown-item"><!----> <a href="/REACT/" class="nav-link">react</a></li><li class="dropdown-item"><!----> <a href="/VUE/" class="nav-link">vue</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="后台" class="dropdown-title"><span class="title">后台</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/NODE/" class="nav-link">node</a></li><li class="dropdown-item"><!----> <a href="/UBUNTU/" class="nav-link">ubuntu</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="其他" class="dropdown-title"><span class="title">其他</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/IDE/" class="nav-link">IDE</a></li><li class="dropdown-item"><!----> <a href="/About/WHY.html" class="nav-link">待了解</a></li><li class="dropdown-item"><!----> <a href="/INTERVIEW/" class="nav-link">面试</a></li><li class="dropdown-item"><!----> <a href="/hello/" class="nav-link">你好</a></li></ul></div></div><div class="nav-item"><a href="https://github.com/Johnhong9527" target="_blank" rel="noopener noreferrer" class="nav-link external">
  14. GitHub
  15. <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="前端" class="dropdown-title"><span class="title">前端</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/CSS/" class="nav-link">CSS</a></li><li class="dropdown-item"><!----> <a href="/FLUTTER/" class="nav-link">flutter</a></li><li class="dropdown-item"><!----> <a href="/GIT/" class="nav-link">GIT</a></li><li class="dropdown-item"><!----> <a href="/JavaScript/" class="nav-link router-link-active">JavaScript</a></li><li class="dropdown-item"><!----> <a href="/REACT/" class="nav-link">react</a></li><li class="dropdown-item"><!----> <a href="/VUE/" class="nav-link">vue</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="后台" class="dropdown-title"><span class="title">后台</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/NODE/" class="nav-link">node</a></li><li class="dropdown-item"><!----> <a href="/UBUNTU/" class="nav-link">ubuntu</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="其他" class="dropdown-title"><span class="title">其他</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/IDE/" class="nav-link">IDE</a></li><li class="dropdown-item"><!----> <a href="/About/WHY.html" class="nav-link">待了解</a></li><li class="dropdown-item"><!----> <a href="/INTERVIEW/" class="nav-link">面试</a></li><li class="dropdown-item"><!----> <a href="/hello/" class="nav-link">你好</a></li></ul></div></div><div class="nav-item"><a href="https://github.com/Johnhong9527" target="_blank" rel="noopener noreferrer" class="nav-link external">
  16. GitHub
  17. <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav> <ul class="sidebar-links"><li><a href="/JavaScript/" class="sidebar-link">JS 目录</a></li><li><a href="/JavaScript/2018_10_29_02.html" class="sidebar-link">代码收集</a></li><li><a href="/JavaScript/2018_10_28_01.html" class="sidebar-link">动态替换图片</a></li><li><a href="/JavaScript/2018_11_02_01.html" class="sidebar-link">战舰游戏</a></li><li><a href="/JavaScript/2018_11_02_02.html" class="sidebar-link">原理</a></li><li><a href="/JavaScript/2018_11_02_03.html" class="sidebar-link">匿名函数和闭包</a></li><li><a href="/JavaScript/2018_11_02_04.html" class="sidebar-link">instanceof运算符</a></li><li><a href="/JavaScript/2018_11_02_05.html" class="sidebar-link">JavaScript 事件流</a></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="this、apply、call、bind"><a href="#this、apply、call、bind" class="header-anchor">#</a> this、apply、call、bind</h1> <h2 id="this"><a href="#this" class="header-anchor">#</a> this</h2> <ul><li><code>this</code> 永远指向最后调用它的那个对象</li></ul> <h2 id="apply、call-的区别"><a href="#apply、call-的区别" class="header-anchor">#</a> apply、call 的区别</h2> <h4 id="对于-apply、call-二者而言,作用完全一样,只是接受参数的方式不太一样。例如,有一个函数定义如下:"><a href="#对于-apply、call-二者而言,作用完全一样,只是接受参数的方式不太一样。例如,有一个函数定义如下:" class="header-anchor">#</a> 对于 apply、call 二者而言,作用完全一样,只是接受参数的方式不太一样。例如,有一个函数定义如下:</h4> <div class="language-js line-numbers-mode"><pre class="language-js"><code><span class="token keyword">var</span> <span class="token function-variable function">func</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">arg1<span class="token punctuation">,</span> arg2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
  18. </code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><p>就可以通过如下方式来调用:</p> <h4 id="使用场景"><a href="#使用场景" class="header-anchor">#</a> 使用场景</h4> <p>参数明确使用<code>call</code>,参数不明确使用<code>apply</code>;</p> <div class="language-js line-numbers-mode"><pre class="language-js"><code><span class="token function">func</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> arg1<span class="token punctuation">,</span> arg2<span class="token punctuation">)</span><span class="token punctuation">;</span>
  19. <span class="token function">func</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>arg1<span class="token punctuation">,</span> arg2<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  20. </code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h2 id="bind"><a href="#bind" class="header-anchor">#</a> bind</h2> <p><code>MDN</code>的解释是:<code>bind()</code>方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 <code>this</code>,传入 <code>bind()</code> 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。</p> <h2 id="总结"><a href="#总结" class="header-anchor">#</a> 总结</h2> <ul><li><code>apply</code>、<code>call</code> 、<code>bind</code>三者都是用来改变函数的<code>this</code>对象的指向的;</li> <li><code>apply</code>、<code>call</code> 、<code>bind</code>三者第一个参数都是 this 要指向的对象,也就是想指定的上下文;</li> <li><code>apply</code>、<code>call</code> 、<code>bind</code>三者都可以利用后续参数传参;</li> <li><code>bind</code>是返回对应函数,便于稍后调用;<code>apply</code>、<code>call</code>则是立即调用.</li></ul> <h4 id="学习资料"><a href="#学习资料" class="header-anchor">#</a> 学习资料</h4> <ul><li><a href="https://www.cnblogs.com/coco1s/p/4833199.html" target="_blank" rel="noopener noreferrer">【优雅代码】深入浅出 妙用 Javascript 中 apply、call、bind<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li> <li><a href="https://juejin.im/post/59bfe84351882531b730bac2" target="_blank" rel="noopener noreferrer">this、apply、call、bind<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li> <li><a href="https://juejin.im/post/5a9640335188257a7924d5ef" target="_blank" rel="noopener noreferrer">让你弄懂 call、apply、bind 的应用和区别<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li></ul></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">7/16/2019, 10:09:07 PM</span></div></footer> <!----> </main></div><div class="global-ui"></div></div>
  21. <script src="/assets/js/app.9558671e.js" defer></script><script src="/assets/js/3.515b53d6.js" defer></script><script src="/assets/js/92.f6e0c47a.js" defer></script>
  22. </body>
  23. </html>