Skip to content

Commit

Permalink
Site updated: 2019-06-11 15:11:22
Browse files Browse the repository at this point in the history
  • Loading branch information
xxplus committed Jun 11, 2019
1 parent a568f6d commit 97c6657
Show file tree
Hide file tree
Showing 22 changed files with 222 additions and 210 deletions.
4 changes: 2 additions & 2 deletions 2019/05/22/2 字符串/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -218,11 +218,11 @@ <h1 id="Base64-转码"><a href="#Base64-转码" class="headerlink" title="Base64

<nav id="article-nav">

<a href="/2019/05/22/9 JavaScript Classes/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/5 标准库/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA6 类
ECMA5 标准库

</div>
</a>
Expand Down
8 changes: 4 additions & 4 deletions 2019/05/22/3 对象/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -252,18 +252,18 @@ <h1 id="遍历总结"><a href="#遍历总结" class="headerlink" title="遍历

<nav id="article-nav">

<a href="/2019/05/22/Call与Apply/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/4 函数/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 CALL APPLY 模拟
ECMA5 函数

</div>
</a>


<a href="/2019/05/22/关于 this 指针/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 this指针</div>
<a href="/2019/05/22/9 JavaScript Classes/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA6 类</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
4 changes: 2 additions & 2 deletions 2019/05/22/4 函数/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -277,8 +277,8 @@ <h1 id="6-立即调用的函数表达式-IIFE"><a href="#6-立即调用的函数
</a>


<a href="/2019/05/22/Call与Apply/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 CALL APPLY 模拟</div>
<a href="/2019/05/22/3 对象/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 对象</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
8 changes: 4 additions & 4 deletions 2019/05/22/5 标准库/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -241,18 +241,18 @@ <h1 id="6-控制对象的状态"><a href="#6-控制对象的状态" class="heade

<nav id="article-nav">

<a href="/2019/05/22/7 包装对象 wrapper/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/Call与Apply/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 包装对象
ECMA5 CALL APPLY 模拟

</div>
</a>


<a href="/2019/05/22/9 面向对象编程/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 面向对象编程</div>
<a href="/2019/05/22/2 字符串/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 字符串</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
8 changes: 4 additions & 4 deletions 2019/05/22/6 Array/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -423,18 +423,18 @@ <h1 id="3-example"><a href="#3-example" class="headerlink" title="3 example"></a

<nav id="article-nav">

<a href="/2019/05/22/关于 this 指针/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/7 包装对象 wrapper/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 this指针
ECMA5 包装对象

</div>
</a>


<a href="/2019/05/22/7 包装对象 wrapper/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 包装对象</div>
<a href="/2019/05/22/9 面向对象编程/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 面向对象编程</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
8 changes: 4 additions & 4 deletions 2019/05/22/7 包装对象 wrapper/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -258,18 +258,18 @@ <h3 id="3-4-字符串的实例方法"><a href="#3-4-字符串的实例方法" cl

<nav id="article-nav">

<a href="/2019/05/22/6 Array/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/关于 this 指针/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 数组
ECMA5 this指针

</div>
</a>


<a href="/2019/05/22/5 标准库/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 标准库</div>
<a href="/2019/05/22/6 Array/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 数组</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
8 changes: 4 additions & 4 deletions 2019/05/22/9 JavaScript Classes/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -238,18 +238,18 @@ <h1 id="Questions"><a href="#Questions" class="headerlink" title="Questions"></a

<nav id="article-nav">

<a href="/2019/05/22/9 面向对象编程/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/3 对象/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 面向对象编程
ECMA5 对象

</div>
</a>


<a href="/2019/05/22/2 字符串/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 字符串</div>
<a href="/2019/05/22/关于 this 指针/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 this指针</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
8 changes: 4 additions & 4 deletions 2019/05/22/9 面向对象编程/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -279,18 +279,18 @@ <h1 id="跳-对象的相关方法"><a href="#跳-对象的相关方法" class="h

<nav id="article-nav">

<a href="/2019/05/22/5 标准库/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/6 Array/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 标准库
ECMA5 数组

</div>
</a>


<a href="/2019/05/22/9 JavaScript Classes/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA6 类</div>
<a href="/2019/05/22/Call与Apply/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 CALL APPLY 模拟</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
22 changes: 17 additions & 5 deletions 2019/05/22/Call与Apply/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<meta property="og:site_name" content="chochi&#39;s workshop">
<meta property="og:description" content="概念 每个函数都包括两个非继承而来的方法 apply call 在特定的作用域中调用函数,实际上等于设置函数体内this对象的值 看出 call 和 apply 是为了动态改变 this 而出现的区别 apply() 接受两个参数,第一个是运行函数的作用域,第二个是参数数组,参数数组可以用arrary实例,也可以是arguments对象。 call() 参数必须逐个列出来 call">
<meta property="og:locale" content="default">
<meta property="og:updated_time" content="2019-06-01T06:53:45.963Z">
<meta property="og:updated_time" content="2019-06-11T07:10:42.740Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="ECMA5 CALL APPLY 模拟">
<meta name="twitter:description" content="概念 每个函数都包括两个非继承而来的方法 apply call 在特定的作用域中调用函数,实际上等于设置函数体内this对象的值 看出 call 和 apply 是为了动态改变 this 而出现的区别 apply() 接受两个参数,第一个是运行函数的作用域,第二个是参数数组,参数数组可以用arrary实例,也可以是arguments对象。 call() 参数必须逐个列出来 call">
Expand Down Expand Up @@ -185,11 +185,23 @@ <h1 id="call-模拟"><a href="#call-模拟" class="headerlink" title="call 模
</ul>
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Function</span>.prototype.myCall = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">let</span> args = <span class="built_in">Array</span>.from(<span class="built_in">arguments</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> context = args.shift() || <span class="built_in">window</span>; <span class="comment">// null -&gt; window</span></span><br><span class="line"> context.callFun = <span class="keyword">this</span>; <span class="comment">// 将函数设置为该对象的一个属性</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> result = !args ?context.callFun() : context.callFun(...args); </span><br><span class="line"> <span class="keyword">delete</span> context.callFun;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<a id="more"></a>
<blockquote>
<p>190611 更新</p>
</blockquote>
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Function</span>.prototype.myCall = <span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</span><br><span class="line"> <span class="keyword">let</span> args = <span class="built_in">Array</span>.from(<span class="built_in">arguments</span>);</span><br><span class="line"> <span class="keyword">const</span> context = args.shift() || <span class="built_in">window</span>;</span><br><span class="line"> context.func = <span class="keyword">this</span>;</span><br><span class="line"> <span class="keyword">const</span> result = context.fun(...args);</span><br><span class="line"> <span class="keyword">delete</span> context.func;</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<ul>
<li>参数是数组</li>
</ul>
<h1 id="apply-模拟"><a href="#apply-模拟" class="headerlink" title="apply 模拟"></a>apply 模拟</h1><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Function</span>.prototype.myApply = <span class="function"><span class="keyword">function</span>(<span class="params">_context,array</span>)</span>&#123;</span><br><span class="line"> <span class="keyword">let</span> context = _context || <span class="built_in">window</span>;</span><br><span class="line"> context.fn = <span class="keyword">this</span>;</span><br><span class="line"> <span class="keyword">let</span> result = !array ? context.fn() : context.fn(...array);</span><br><span class="line"> <span class="keyword">delete</span> context.fn;</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<blockquote>
<p>190611 更新</p>
</blockquote>
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Function</span>.prototype.myApply = <span class="function"><span class="keyword">function</span>(<span class="params">context,args</span>)</span>&#123;</span><br><span class="line"> context = context || <span class="built_in">window</span>;</span><br><span class="line"> context.func = <span class="keyword">this</span>;</span><br><span class="line"> <span class="keyword">const</span> result = context.func(...args);</span><br><span class="line"> <span class="keyword">delete</span> context.func;</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h1 id="实现-bind"><a href="#实现-bind" class="headerlink" title="实现 bind"></a>实现 bind</h1><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Function</span>.prototype.myBind = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line"> <span class="keyword">var</span> self = <span class="keyword">this</span>, <span class="comment">// 保存原函数</span></span><br><span class="line"> context = [].shift.call(<span class="built_in">arguments</span>), <span class="comment">// 保存需要绑定的this上下文</span></span><br><span class="line"> args = [].slice.call(<span class="built_in">arguments</span>); <span class="comment">// 剩余的参数转为数组</span></span><br><span class="line"> <span class="keyword">return</span> <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123; <span class="comment">// 返回一个新函数</span></span><br><span class="line"> self.apply(context,[...args]);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">var</span> obj = &#123;</span><br><span class="line"> name: <span class="string">'chochi'</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">func</span>(<span class="params">a,b,c</span>) </span>&#123;</span><br><span class="line"> <span class="built_in">console</span>.log(<span class="keyword">this</span>.name);</span><br><span class="line"> <span class="built_in">console</span>.log(a,b,c);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">var</span> func1 = func.myBind(obj,<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>);</span><br><span class="line">func1();</span><br></pre></td></tr></table></figure>
<blockquote>
<p>190611 更新 绑定参数问题</p>
</blockquote>
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Function</span>.prototype.myBind = <span class="function"><span class="keyword">function</span>(<span class="params">...args</span>)</span>&#123;</span><br><span class="line"> <span class="keyword">const</span> context = args.shift() || <span class="built_in">window</span>;</span><br><span class="line"> <span class="keyword">const</span> self = <span class="keyword">this</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="function"><span class="keyword">function</span>(<span class="params">...inner</span>)</span>&#123;</span><br><span class="line"> self.call(context,...args,...inner);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><ol>
<li><a href="https://github.com/lin-xin/blog/issues/7" target="_blank" rel="noopener">JavaScript 中 apply 、call 的详解-linxin</a></li>
</ol>
Expand Down Expand Up @@ -236,18 +248,18 @@ <h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考

<nav id="article-nav">

<a href="/2019/05/22/4 函数/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/9 面向对象编程/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 函数
ECMA5 面向对象编程

</div>
</a>


<a href="/2019/05/22/3 对象/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 对象</div>
<a href="/2019/05/22/5 标准库/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 标准库</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
8 changes: 4 additions & 4 deletions 2019/05/22/关于 this 指针/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -221,18 +221,18 @@ <h2 id="2-加一个关于箭头函数的this指针"><a href="#2-加一个关于

<nav id="article-nav">

<a href="/2019/05/22/3 对象/" id="article-nav-newer" class="article-nav-link-wrap">
<a href="/2019/05/22/9 JavaScript Classes/" id="article-nav-newer" class="article-nav-link-wrap">
<i class="icon-circle-left"></i>
<div class="article-nav-title">

ECMA5 对象
ECMA6 类

</div>
</a>


<a href="/2019/05/22/6 Array/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 数组</div>
<a href="/2019/05/22/7 包装对象 wrapper/" id="article-nav-older" class="article-nav-link-wrap">
<div class="article-nav-title">ECMA5 包装对象</div>
<i class="icon-circle-right"></i>
</a>

Expand Down
Loading

0 comments on commit 97c6657

Please sign in to comment.