<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ECMAScript on 又LAG隨性筆記</title><link>https://www.lagagain.com/tags/ecmascript/</link><description>Recent content in ECMAScript on 又LAG隨性筆記</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><lastBuildDate>Wed, 15 Sep 2021 05:33:00 +0800</lastBuildDate><atom:link href="https://www.lagagain.com/tags/ecmascript/index.xml" rel="self" type="application/rss+xml"/><item><title>你可能都不瞭解的JS變數祕密 - 一文了解無宣告、var、let、const變數細節</title><link>https://www.lagagain.com/post/%E4%BD%A0%E5%8F%AF%E8%83%BD%E9%83%BD%E4%B8%8D%E7%9E%AD%E8%A7%A3%E7%9A%84js%E8%AE%8A%E6%95%B8%E7%A5%95%E5%AF%86/</link><pubDate>Wed, 15 Sep 2021 05:33:00 +0800</pubDate><guid>https://www.lagagain.com/post/%E4%BD%A0%E5%8F%AF%E8%83%BD%E9%83%BD%E4%B8%8D%E7%9E%AD%E8%A7%A3%E7%9A%84js%E8%AE%8A%E6%95%B8%E7%A5%95%E5%AF%86/</guid><description>&lt;blockquote>
&lt;p>本文優先發表於&lt;a href="https://tw.alphacamp.co/blog/javascript-var-let-const">ALPHAcamp&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;h1 id="前言">前言&lt;/h1>
&lt;p>這類問題我被問到不止一次。不得不說JS的變數蠻特別的。新手菜鳥會問，連老鳥也都常搞錯。&lt;/p>
&lt;p>更甚者&amp;hellip;近日更是聽到一個自稱有五年經驗的軟體工程師稱： &lt;code>var&lt;/code> 宣告的變數是全域變數&lt;/p>
&lt;p>&lt;img src="https://media.giphy.com/media/Sw6lQOt2nOOruIwmVy/source.gif" alt="暈">&lt;/p>
&lt;p>我知道我身邊的朋友，也有不少可能不清楚，或是沒探究這麼深入，相關文章有但不多。
於是乎&amp;hellip;感覺我再想拖延，也應該把這篇文章寫出來。&lt;/p>
&lt;p>&lt;strong>這篇文章對於你寫更好的JS並沒有太多幫助，有許多部分平常根本不太會用到。但卻是非常基礎的概念。儘管不知道，通常按照當前常見規範，程式碼亦不會太糟糕。&lt;/strong>&lt;/p>
&lt;hr>
&lt;p>這篇文章主要是從一份回覆修改而來。&lt;/p>
&lt;h1 id="變數的生存範圍">變數的生存範圍&lt;/h1>
&lt;p>無關鍵字賦值、&lt;code>var&lt;/code>宣告、&lt;code>let&lt;/code>宣告最大的差別在於生存區域的不同。無關鍵字賦值 - 這意味著全域變數的宣告，當然你在全域範圍使用&lt;code>var&lt;/code>/&lt;code>let&lt;/code>宣告也是全域的。只是無關鍵字可能引發意外的情況，像是你預期變數應該是函數區域的：&lt;/p>
&lt;div class="highlight">&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="color:#66d9ef">function&lt;/span> &lt;span style="color:#a6e22e">printG&lt;/span>(){
&lt;span style="color:#a6e22e">g&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">`&lt;/span>&lt;span style="color:#e6db74">printG: &lt;/span>&lt;span style="color:#e6db74">`&lt;/span>, &lt;span style="color:#a6e22e">g&lt;/span>)
}
&lt;span style="color:#a6e22e">printG&lt;/span>() &lt;span style="color:#75715e">// =&amp;gt; printG: 1
&lt;/span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">`&lt;/span>&lt;span style="color:#e6db74">Global G:&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>, &lt;span style="color:#a6e22e">g&lt;/span>) &lt;span style="color:#75715e">// =&amp;gt; Global G: 1
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上例中全域情況也取得到在&lt;code>printG&lt;/code>函數裏定義的&lt;strong>全域變數&lt;/strong>。這相當於你顯式定義&lt;code>g&lt;/code>於全域：&lt;/p></description></item><item><title>什麼是jQuery？前端框架盛行還需要JavaScript函式庫嗎？</title><link>https://www.lagagain.com/post/%E4%BB%80%E9%BA%BC%E6%98%AFjquery%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E7%9B%9B%E8%A1%8C%E9%82%84%E9%9C%80%E8%A6%81javascript%E5%87%BD%E5%BC%8F%E5%BA%AB%E5%97%8E/</link><pubDate>Sun, 05 Apr 2020 09:05:17 +0800</pubDate><guid>https://www.lagagain.com/post/%E4%BB%80%E9%BA%BC%E6%98%AFjquery%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E7%9B%9B%E8%A1%8C%E9%82%84%E9%9C%80%E8%A6%81javascript%E5%87%BD%E5%BC%8F%E5%BA%AB%E5%97%8E/</guid><description>&lt;blockquote>
&lt;ul>
&lt;li>本篇首發於&lt;a href="https://tw.alphacamp.co/blog/jquery-javascript-library-overview">ALPHACamp Blog&lt;/a>(2020-03-25)&lt;/li>
&lt;li>2020-04-05 更新&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;hr>
&lt;blockquote>
&lt;p>前端框架盛行還需要JavaScript函式庫嗎？&lt;br>
如果你想透過本篇文章，直截了當的知道該不該使用jQuery，可能要讓你失望了。&lt;br>
很難說到底應不應該使用jQuery，可能在某些情況下使用jQuery仍是最好的選擇。即使是現在的流行的三大前端框架，也是依照情況與需求使用。&lt;br>
了解jQuery到底是什麼、前端框架是什麼，會比要不要使用jQuery更有意義。&lt;/p>
&lt;p>本篇帶你看看我了解的jQuery前世今生&lt;/p>
&lt;/blockquote>
&lt;p>瀏覽器發展歷史上出現過幾次大混戰。儘管後來有了W3C(全球資訊網協會/World Wide Web Consortium)進行標準的制定，各個瀏覽器廠商仍開發各自瀏覽器的「特異功能」吸引使用者與開發者。這些特異功能促使了瀏覽器標準的進步，也照成了開發上的困難。&lt;/p>
&lt;blockquote>
&lt;p>為解決網路應用中不同平台、技術和開發者帶來的不相容問題，保障網路資訊的順利和完整流通，全球資訊網協會制定了一系列標準並督促網路應用開發者和內容提供者遵循這些標準。&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;/blockquote>
&lt;p>2006年1月，&lt;code>jQuery&lt;/code>推出了第一個版本，隨後變成為了最受歡迎的JavaScript函式庫之一&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>。附帶一題，我們現在熟悉的HTML5標準是在2014年正式定稿推出&lt;sup id="fnref:3">&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref">3&lt;/a>&lt;/sup>，即使是現在，每年瀏覽器的標準也是快速地在變動。在後文我會在說明為何開頭我想提到這兩件事情。&lt;/p>
&lt;h1 id="什麼是jquery-從常見功能來看">什麼是jQuery? 從常見功能來看&lt;/h1>
&lt;p>jQuery之所以受歡迎，是因為他提供了一系列簡單方便，而且兼容的操作，省去開發人員的部份煩惱。這裡舉幾個簡單的例子：&lt;/p>
&lt;h2 id="選取器">選取器&lt;/h2>
&lt;p>現代瀏覽器標準分成三個部份：&lt;/p>
&lt;ol>
&lt;li>HTML&lt;/li>
&lt;li>CSS&lt;/li>
&lt;li>ECMAScript / JavaScript&lt;/li>
&lt;/ol>
&lt;p>其中第三個就是常聽到的JS/Javascript。目前更正式的名稱是ECMAScript，也是今天主要jQuery主要的基礎。不同於瀏覽器腳本(Script)的標準，CSS2在以前就提供豐富易用的選擇器，讓設計人員撰寫樣式表(stylesheet)&lt;/p></description></item><item><title>7天搞懂JS進階議題(day07-1)-系列目錄</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday07-1-%E7%B3%BB%E5%88%97%E7%9B%AE%E9%8C%84/</link><pubDate>Sat, 29 Feb 2020 07:26:00 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday07-1-%E7%B3%BB%E5%88%97%E7%9B%AE%E9%8C%84/</guid><description>&lt;blockquote>
&lt;p>寫了這麼久的JS，你還在物件之前的時代嗎？只有資料、函式可以用，破破的抽象化，不會難以維護？儘管JS起初並不以物件導向設計，但透過原形鏈設計，其仍然可以具有好維護的物件導向特色。本系列從最基礎的this，深入ES6之後的class。&lt;/p>
&lt;/blockquote>
&lt;h1 id="系列目錄">系列目錄&lt;/h1>
&lt;ol start="0">
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday00-oh...%E9%96%8B%E5%A7%8B%E4%BA%86....../">第0天 - Oh&amp;hellip;開始了&amp;hellip;&amp;hellip;&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday01-this-bind/">第1天 - this &amp;amp; bind: 你不能不知道的&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday02-new-factory/">第2天 - new &amp;amp; factory: 如何建立一個新物件&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday03-function-object/">第3天 - Function &amp;amp; Object: 關於Prototype Chain繼承&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday04-class-constructor-%E5%90%83%E8%AA%9E%E6%B3%95%E7%B3%96%E5%88%A5%E5%99%8E%E5%88%B0/">第4天 - Class &amp;amp; constructor: 吃語法糖別噎到&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday05-getter-setter-%E5%B1%AC%E6%80%A7%E6%8F%8F%E8%BF%B0%E5%99%A8/">第5天 - getter &amp;amp; setter: 屬性描述器&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday06-yield-yield-%E7%94%9F%E6%88%90%E5%99%A8/">第6天 - yield &amp;amp; yield*: 生成器&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday07-symbol-proxy-%E4%BB%A5%E5%89%8D%E6%B2%92%E6%9C%89%E7%9A%84/">第7天 - Symbol &amp;amp; Proxy: 以前沒有的&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday08-closure-private%E7%95%AA%E5%A4%96%E7%9F%AD%E7%AF%87-%E9%9A%B1%E7%A7%81%E6%88%90%E5%93%A1/">第8天 - Closure &amp;amp; Private:番外短篇 隱私成員&lt;/a>&lt;/li>
&lt;/ol>
&lt;h1 id="各章節簡介">各章節簡介&lt;/h1>
&lt;h2 id="第1天-this--bind-你不能不知道的">(第1天) this &amp;amp; bind: 你不能不知道的&lt;/h2>
&lt;p>物件導向必不可少的，就是如何引用參考自己。&lt;/p>
&lt;blockquote>
&lt;p>要是自己的錢包都拿不出來，你要怎買個冰棒？&lt;/p>
&lt;/blockquote>
&lt;h2 id="第2天-new--factory-如何建立一個新物件">(第2天) new &amp;amp; factory: 如何建立一個新物件&lt;/h2>
&lt;p>既然是要來物件導向，當然要先來學怎麼建立物件。本節帶你看看如何建立一個新的物件。&lt;/p>
&lt;h2 id="第3天-function--object-關於prototype-chain繼承">(第3天) Function &amp;amp; Object: 關於Prototype Chain繼承&lt;/h2>
&lt;p>&lt;strong>在&lt;code>class&lt;/code>之前，必須了解的prototype chain&lt;/strong>。&lt;/p>
&lt;blockquote>
&lt;p>JavaScript 是個沒有實做 class 關鍵字的動態語言，所以會對那些基於類別（class-based）語言（如 Java 或 C++）背景出身的開發者來說會有點困惑。（&lt;strong>在 ES2015 有提供 class 關鍵字，但那只是個語法糖，JavaScript 仍然是基於原型（prototype-based）的語言&lt;/strong>）。&lt;/p>
&lt;/blockquote>
&lt;h2 id="第4天-class--constructor-吃語法糖別噎到">(第4天) Class &amp;amp; constructor: 吃語法糖別噎到&lt;/h2></description></item><item><title>7天搞懂JS進階議題(day08) Closure &amp; Private:番外短篇 隱私成員</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday08-closure-private%E7%95%AA%E5%A4%96%E7%9F%AD%E7%AF%87-%E9%9A%B1%E7%A7%81%E6%88%90%E5%93%A1/</link><pubDate>Sat, 29 Feb 2020 06:26:00 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday08-closure-private%E7%95%AA%E5%A4%96%E7%9F%AD%E7%AF%87-%E9%9A%B1%E7%A7%81%E6%88%90%E5%93%A1/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>這篇是臨時起意補的一篇短篇，用於示例如何模擬私有屬性。儘管這可能不是JS主流設計思想方法，但知道相信對你沒壞事。&lt;/p>
&lt;p>&lt;a href="https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday05-getter-setter-%E5%B1%AC%E6%80%A7%E6%8F%8F%E8%BF%B0%E5%99%A8/">在第5天-getter &amp;amp; setter: 屬性描述器&lt;/a>，曾經看過這樣的例子：&lt;/p>
&lt;div class="highlight">&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-js" data-lang="js">&lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">神崎家&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">class&lt;/span> {
&lt;span style="color:#a6e22e">constructor&lt;/span>(&lt;span style="color:#a6e22e">name&lt;/span>){
&lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">__name&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`&lt;/span>&lt;span style="color:#e6db74">神崎・&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">name&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>;
}
&lt;span style="color:#66d9ef">static&lt;/span> &lt;span style="color:#a6e22e">born&lt;/span>(&lt;span style="color:#a6e22e">name&lt;/span>){
&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">神崎家&lt;/span>(&lt;span style="color:#a6e22e">name&lt;/span>)
}
&lt;span style="color:#a6e22e">set&lt;/span> &lt;span style="color:#a6e22e">name&lt;/span>(&lt;span style="color:#a6e22e">new_name&lt;/span>){
&lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">__name&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`&lt;/span>&lt;span style="color:#e6db74">神崎・&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">new_name&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>;
}
&lt;span style="color:#a6e22e">get&lt;/span> &lt;span style="color:#a6e22e">name&lt;/span>(){
&lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">first_name&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">__name&lt;/span>.&lt;span style="color:#a6e22e">substr&lt;/span>(&lt;span style="color:#ae81ff">0&lt;/span>,&lt;span style="color:#ae81ff">2&lt;/span>),
&lt;span style="color:#a6e22e">last_name&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">__name&lt;/span>.&lt;span style="color:#a6e22e">substr&lt;/span>(&lt;span style="color:#ae81ff">3&lt;/span>, &lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">__name&lt;/span>.&lt;span style="color:#a6e22e">length&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>);
&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#e6db74">`&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">first_name&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">・H・&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">last_name&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>
}
&lt;span style="color:#a6e22e">introduce&lt;/span>(){
&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">`&lt;/span>&lt;span style="color:#e6db74">Hi~ My name is &lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">name&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>)
}
&lt;span style="color:#a6e22e">rename&lt;/span>(&lt;span style="color:#a6e22e">new_name&lt;/span>){
&lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">name&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">new_name&lt;/span>;
&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">name&lt;/span>;
}
}
&lt;/code>&lt;/pre>&lt;/div>&lt;p>可能會有人問&amp;hellip;為什麼&lt;code>__name&lt;/code>不直接這樣寫就好:&lt;/p></description></item><item><title>7天搞懂JS進階議題(day07)-Symbol &amp; Proxy: 以前沒有的</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday07-symbol-proxy-%E4%BB%A5%E5%89%8D%E6%B2%92%E6%9C%89%E7%9A%84/</link><pubDate>Sat, 29 Feb 2020 05:52:23 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday07-symbol-proxy-%E4%BB%A5%E5%89%8D%E6%B2%92%E6%9C%89%E7%9A%84/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>最後一天，來看兩個特別的類別&amp;ndash;&lt;code>Symbol&lt;/code>和&lt;code>Proxy&lt;/code>。&lt;/p>
&lt;h1 id="以前的物件object">以前的物件(object)&lt;/h1>
&lt;h2 id="key只能是字串">key只能是字串&lt;/h2>
&lt;p>在以前，物件的key一定要是基礎字串，不過因為JS語法糖的關係可以不用加引號：&lt;/p>
&lt;div class="highlight">&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-js" data-lang="js">&lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">obj&lt;/span> &lt;span style="color:#f92672">=&lt;/span> {
&lt;span style="color:#e6db74">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#34;World&amp;#34;&lt;/span>,
}
&lt;span style="color:#75715e">// 等價於
&lt;/span>&lt;span style="color:#75715e">&lt;/span>
&lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">obj&lt;/span> &lt;span style="color:#f92672">=&lt;/span> {
&lt;span style="color:#a6e22e">name&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#34;World&amp;#34;&lt;/span>,
}
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="如果不是呢">如果不是呢？&lt;/h2></description></item><item><title>7天搞懂JS進階議題(day06)-yield &amp; yield*: 生成器</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday06-yield-yield-%E7%94%9F%E6%88%90%E5%99%A8/</link><pubDate>Fri, 28 Feb 2020 09:03:28 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday06-yield-yield-%E7%94%9F%E6%88%90%E5%99%A8/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>今天會往物件導向外頭邁出一步。是的，到昨天已經差不多把JS物件導向介紹的差不多了。那今天的主題是什麼呢？生成器(generator)。這個類型的建立與使用，和普通的JS類別有些不同，來看看吧！&lt;/p>
&lt;h1 id="生成器generator">生成器(generator)&lt;/h1>
&lt;p>什麼是生成器(generator)？簡單說就是一個 &lt;em>序列工廠&lt;/em> ，你跟他要東西他就給你東西，直到原料不足無法生產。&lt;/p>
&lt;p>&lt;img src="https://media.giphy.com/media/OhewEeOgIXJss/giphy.gif" alt="">&lt;/p></description></item><item><title>7天搞懂JS進階議題(day05)-getter &amp; setter: 屬性描述器</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday05-getter-setter-%E5%B1%AC%E6%80%A7%E6%8F%8F%E8%BF%B0%E5%99%A8/</link><pubDate>Thu, 27 Feb 2020 09:28:16 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday05-getter-setter-%E5%B1%AC%E6%80%A7%E6%8F%8F%E8%BF%B0%E5%99%A8/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>有了物件然後呢？&lt;br>
今天來說說關於成員(field/attribute/member)背後的屬性。&lt;/p>
&lt;h1 id="getter--setter">getter &amp;amp; setter&lt;/h1>
&lt;p>有一個家族&amp;ndash; &lt;em>神崎家&lt;/em> ，生了一個小孩叫 &lt;em>アリア&lt;/em> ，但生下後被 &lt;em>りこ&lt;/em> 偽裝，被發現後重新命名為 &lt;em>アリア&lt;/em>。&lt;/p>
&lt;blockquote>
&lt;p>如有雷同存屬巧合&lt;/p>
&lt;/blockquote></description></item><item><title>7天搞懂JS進階議題(day04)-Class &amp; Constructor: 吃語法糖別噎到</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday04-class-constructor-%E5%90%83%E8%AA%9E%E6%B3%95%E7%B3%96%E5%88%A5%E5%99%8E%E5%88%B0/</link><pubDate>Wed, 26 Feb 2020 07:08:31 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday04-class-constructor-%E5%90%83%E8%AA%9E%E6%B3%95%E7%B3%96%E5%88%A5%E5%99%8E%E5%88%B0/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>現在你應該已經有發車前的基礎準備了。繫緊安全帶，撈思跡要踩油門加速了！&lt;/p>
&lt;p>&lt;img src="https://media.giphy.com/media/XvVfKCncJIOY/giphy.gif" alt="">&lt;/p>
&lt;p>關於&lt;code>class&lt;/code>這個關鍵字，JS將其作為保留字好一段時間，直至ES6標準的制定，再經過瀏覽器漫長的實做，至今才有&lt;code>class&lt;/code>的語法糖可以使用。&lt;/p></description></item><item><title>7天搞懂JS進階議題(day03)-Function &amp; Object: 關於Prototype Chain繼承</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday03-function-object/</link><pubDate>Tue, 25 Feb 2020 10:05:11 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday03-function-object/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="prototype">Prototype&lt;/h1>
&lt;blockquote>
&lt;p>有人說：「在寫JVM語言前，你必須先是Java程式開發人員」。 &lt;br>
在寫TypeScript前，你還是得先會JavaScript。&lt;br>
[在進階一點(誤)] 在寫任何程式語言前，比必須先會組合語言&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>在&lt;code>class&lt;/code>之前，必須了解的prototype chain&lt;/strong>。&lt;/p>
&lt;p>好拉，上面引言最後一個是來亂的，但是在正式開始寫JS的之前，你還是比需要有 &lt;strong>prototype chain&lt;/strong> 的概念。&lt;/p>
&lt;blockquote>
&lt;p>JavaScript 是個沒有實做 class 關鍵字的動態語言，所以會對那些基於類別（class-based）語言（如 Java 或 C++）背景出身的開發者來說會有點困惑。（&lt;strong>在 ES2015 有提供 class 關鍵字，但那只是個語法糖，JavaScript 仍然是基於原型（prototype-based）的語言&lt;/strong>）。&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;/blockquote>
&lt;p>本節不會立馬就進到原形鏈，在那之前，會先來看看Python、Ruby這類OOP裡同樣有的東西。如果你不是從那來的，可以直接到&lt;a href="#%E5%8E%9F%E5%BD%A2%E8%A8%AD%E8%A8%88%E6%A8%A1%E5%BC%8F--%E5%8E%9F%E5%BD%A2%E9%8F%88prototype-chain">原形鏈&lt;/a>去看。但建議多少還是看一點，有些在JS還蠻常用的。&lt;/p></description></item><item><title>7天搞懂JS進階議題(day02)-new &amp; factory: 如何建立一個新物件</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday02-new-factory/</link><pubDate>Mon, 24 Feb 2020 06:08:11 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday02-new-factory/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>既然是要來物件導向，當然要先來學怎麼建立物件。本節帶你看看如何建立一個新的物件。&lt;/p>
&lt;h1 id="直接建立">直接建立&lt;/h1>
&lt;div class="highlight">&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-js" data-lang="js">&lt;span style="color:#a6e22e">obj0&lt;/span> &lt;span style="color:#f92672">=&lt;/span> {
&lt;span style="color:#a6e22e">name&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#34;World&amp;#34;&lt;/span>,
&lt;span style="color:#a6e22e">hello&lt;/span>(){&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">`&lt;/span>&lt;span style="color:#e6db74">Hello, &lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#66d9ef">this&lt;/span>.&lt;span style="color:#a6e22e">name&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>)},
}
&lt;span style="color:#a6e22e">obj0&lt;/span>.&lt;span style="color:#a6e22e">hello&lt;/span>();
&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="工廠模式">工廠模式&lt;/h1>
&lt;p>可以直接建立物件，也可以透過工廠模式建立並初始化物件。&lt;/p></description></item><item><title>7天搞懂JS進階議題(day01)-This &amp; Bind: 你不能不知道的</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday01-this-bind/</link><pubDate>Sun, 23 Feb 2020 14:32:37 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday01-this-bind/</guid><description>&lt;blockquote>
&lt;p>本系列文章討論JS 物件導向設計相關的特性。 &lt;strong>不含CSS，不含HTML&lt;/strong>！&lt;br>
建議先有些&lt;a href="https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JS基礎&lt;/a>再繼續閱讀。&lt;br>
你也可以看看&lt;a href="https://ithelp.ithome.com.tw/users/20112470/ironman/2103?page=1">從零開始遲來的Web開發筆記&lt;/a>&lt;br>
雖然是「&lt;a href="https://www.coderbridge.com/series/bef169fb20024cafb8cdb32d5b2a0d3d">7天寫作松&lt;/a>」挑戰，但同樣可以視為系列後續文章&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://steamuserimages-a.akamaihd.net/ugc/943969940187972833/D3E9C4E1BC24AF2643CCC53F7982BC8D3C5B1705/" alt="">&lt;/p>
&lt;blockquote>
&lt;p>No CSS! No HTML! No Browser!&lt;br>
Just need programming language&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="this">this&lt;/h1>
&lt;p>物件導向必不可少的，就是如何引用參考自己。&lt;/p>
&lt;blockquote>
&lt;p>要是自己的錢包都拿不出來，你要怎買個冰棒？&lt;/p>
&lt;/blockquote>
&lt;p>寫過C++、Java對於&lt;code>this&lt;/code>這個關鍵字應該不陌生，雖然JS的&lt;code>this&lt;/code>有著很大的不同，但再說明之前，為了來自其他地方的同鞋，容我再多提幾個相對應的例子。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>來自Python、Ruby、Rust的朋友&lt;/strong>&lt;br>
你們可能習慣看到的是&lt;code>self&lt;/code>。&lt;/p>
&lt;p>※ Note: Python可以不使用&lt;code>self&lt;/code>；Rust必須顯示宣告&lt;code>self&lt;/code>或&lt;code>&amp;amp;self&lt;/code>；Ruby則比較像是JS是[隱含宣告](#隱含宣告 vs 明確宣告)&lt;code>self&lt;/code>&lt;/p>
&lt;hr>
&lt;p>&lt;strong>來自VB和VB.NET的朋友&lt;/strong>&lt;/p>
&lt;p>你們會看到的是&lt;code>Me&lt;/code>、&lt;code>My&lt;/code>。&lt;/p></description></item><item><title>7天搞懂JS進階議題(day00)-Oh...開始了......</title><link>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday00-oh...%E9%96%8B%E5%A7%8B%E4%BA%86....../</link><pubDate>Sat, 22 Feb 2020 14:28:50 +0800</pubDate><guid>https://www.lagagain.com/post/7%E5%A4%A9%E6%90%9E%E6%87%82js%E9%80%B2%E9%9A%8E%E8%AD%B0%E9%A1%8Cday00-oh...%E9%96%8B%E5%A7%8B%E4%BA%86....../</guid><description>&lt;h1 id="這系列文章內容會是什麼">這系列文章內容會是什麼？&lt;/h1>
&lt;p>本篇整理了7項ES6之後的相關進階特性(this可能除外)，包含：&lt;/p>
&lt;ol>
&lt;li>this &amp;amp; bind&lt;/li>
&lt;li>Prototype chain&lt;/li>
&lt;li>class &amp;amp; object&lt;/li>
&lt;li>getter, setter&lt;/li>
&lt;li>attr&lt;/li>
&lt;li>Symbol &amp;amp; Proxy&lt;/li>
&lt;li>yield&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h1 id="概述">概述&lt;/h1>
&lt;p>寫了這麼久的JS，你還在物件之前的時代嗎？只有資料、函式可以用，破破的抽象化，不會難以維護？&lt;/p>
&lt;p>儘管JS起初並不以物件導向設計，但透過原形鏈設計，其仍然可以具有好維護的物件導向特色。&lt;/p>
&lt;blockquote>
&lt;p>目前已經被證實的是，物件導向程式設計推廣了程式的靈活性和可維護性，並且在大型專案設計中廣為應用。
&amp;mdash; from &lt;a href="https://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1">Wikipedia&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>本系列從最基礎的&lt;code>this&lt;/code>，深入ES6之後的&lt;code>class&lt;/code>。包含：&lt;/p>
&lt;p>&lt;strong>this&lt;/strong>&lt;br>
物件導向必不可少。
關於隱式宣告與顯示宣告、特殊變數。&lt;/p>
&lt;p>&lt;strong>prototype&lt;/strong>
在&lt;code>class&lt;/code>之前，必須了解的prototype chain&lt;/p>
&lt;p>&lt;strong>class&lt;/strong>
class和new。從constructor開始。&lt;/p>
&lt;p>&lt;strong>getter, setter&lt;/strong>
有了物件然後呢？關於成員(field/attribute/member)。&lt;/p></description></item></channel></rss>