JS之路 Day03 - Prototype Chain(原型鏈)
昨天Prototype世界的例子中,小白這種打電話讓別人再去打電話找的方式,其實就是一種Prototype Chain的概念。 畫一張示意圖會比較清楚一些,用一個空的陣列來做舉例。 首先,陣列也是一種物件,空陣列代表裡面什麼都沒有,不過不代表不能從空陣列去獲取東西。 當我要從物件裡面找一個不存在的屬性,JavaScript 就會直接從它的原型物件去找,要是它的原型物件沒有,就會再往上找它的原型物件,直到最上面,都沒有那就是找不到。 而這個最上面的原型物件就稱作叫Object.prototype。真的就最上面了,再往上找就是null。 而這一個由下往最上尋找的過程,一層一層相依尋找,就是原型鏈。 Object.create這個可以拿來創造出一個擁有原型物件的新空物件,裡面的參數就帶要被繼承的原型物件,比如說: 12345const food = { eat: true,};const apple = Object.create(food); 這個新被創造出來的物件其實原型物件就會自動綁定是 food 了,所以現在的 apple 也可以去看 eat 的這個屬...
JS之路 Day02 - Prototype (原型)
前言我相信每個語法的發明都有它意義存在,以我看來Prototype的存在,是為了要讓JavaScript 也能實現物件導向,準確點來說,可以用來做到物件的繼承,透過Prototype的方式。 Prototype 的產生是為了 JavaScript 的繼承而所謂物件的繼承,就是可以從其他地方拿到本身沒有的方法或是屬性,藉由去繼承有方法跟屬性的物件,來獲得使用那些方法跟屬性的權利。 在JavaScript中,每個object都會去連結到Prototype object => 每個object都可以看得到裡面有Prototype(null是例外~)。 這個Prototype是[[prototype]]也是原型物件。 舉例來說,創造一個空物件,會看見[[Prototype]]: 但是用Object.create使用null當原型的這個新物件是會看到no properties,很乾淨的那種。 Prototype object 包含了 properties(屬性) 跟 methods(方法)簡單解釋一下什麼是properties跟methods。首先要先知道物件會有key-v...
問題_mac 顯示隱藏檔
解答來源: https://gist.github.com/j796160836/262083cdbad0d45eefcd 顯示隱藏檔案:defaults write com.apple.finder AppleShowAllFiles TRUE;\killall Finder 不顯示隱藏檔案:defaults write com.apple.finder AppleShowAllFiles FALSE;\killall Finder
JS之路 Day01 - 開始與結束的序言
大家好,我是 Vic,目前在台南的好想工作室學習,已經在這裡自學了幾個月時間。鐵人賽的開始,代表著我的 JS 學習的路也已經學到了一個段落,這一個階段要挑戰的就是三十天連續的技術發文,挑戰短時間內對JavaScript的理解程度,學習了三、四個月也是一段不短的時間,該來突破自我了! 這段時間自學看了許多網路上資源跟書籍,列出一些我自己覺得很不錯的(各列前三個)。 學習網站: JS MDN提供了很多語法的說明跟相關的技術文件,正確性很高,而且每個語法都有很清晰的範例,是一個我後來當作 JS 字典的地方,會天天看天天查。 JS w3schools跟 MDN 是同個性質的學習網站,但相對來說會簡單些,優點是版面很乾淨,會讓人看了覺得很舒服,我覺得也很適合初學者去看。 Lidemy 鋰學院號稱是一個為初學者而生的線上程式課程平台,我覺得當之無愧,滿完整又便宜,就算不花錢上面也有一些免費的課程。之前花了一個月去訂閱,然後把想看的學習影片全部看完,我覺得很划算。 學習書籍: JavaScript 概念三明治:基礎觀念、語法原理一次帶走!簡稱三明治,看完後個人認為超適合初學者,裡面淺白好...
mac的esc沒有反應問題
這個一直困擾我很久的問題,有時候用一用就突然失效,而到最近更是連 F3 也無法使用,三指往上滑也沒辦法,可惡這是剛買沒有到一年的 mac m1 呀,不過我最終找到了解決方式,記錄一下。 1. 重新開機重新開機就能恢復正常,缺點就是每次發生失效就得一直重新開關機。 2. 重啟 dock在終端機或是其他命令提示的地方下這一個指令: 1killall Dock
問題_遇到錯誤 Error Cannot find module 'request'
在練習api時候遇到的 照著範例貼的也會報錯,無奈 後來解決方式是照著這一篇:https://stackoverflow.com/questions/16482600/node-js-cannot-find-module-request 使用npm install request --save 問題就解決了
問題_為什麼charCodeAt()裡面要帶0
事情的起因是因為我看到了這段code想要理解下方這段程式碼: 但我發現我自己已經忘記我當初為什麼裡面要帶0了 這個問題看mdn後馬上被秒解了 => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt 附可複製貼上的程式碼: 12345678export function caesarcipher(n, s){ let code = s.charCodeAt(0) - 97; let newCode = (code + n) % 26; return String.fromCharCode(newCode + 97;} 結論裡面是放index的意思所以原理是這樣 假如我今天字串是”abc” 那麼charCodeAt(0) 抓取到的值就想是a 答案會是97那麼charCodeAt(1) 抓取到的值就想是b 答案會是98那麼charCodeAt(2) 抓取到的值就想是c 答案會是...
問題_使用function裡面使用for of後,沒辦法直接return
12345678function isIndex(input) { for (const [index, element] of input.entries()) { if (isPrime(element)) { console.log(`質數為${index} 索引值為${element}`); } }} 一開始像是這樣,然後其實沒有辦法直接增加return在外面,或者是直接加上return換掉內部的console.log 最後的解決方式是: 多新增一個變數去接這個for of裡面的東西,因為遇到了最後增加空格的問題,所以最後return出去的版本會再加上trimEnd()=> 123456789function isIndex(input) { let a = ""; for (const [index, element] of input.entries()) { if (isP...
git 修改歷史踩雷紀錄
學習時參考資料github 官方文檔:https://docs.github.com/cn/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message 高見龍 為你自己學 Git :https://gitbook.tw/chapters/rewrite-history/change-commit-message 主要關鍵核心 : git rebase除了 git rebase 之外也有其他可以使用 –amend 參數來進行 Commit可以用來更改最後一個的 commit 紀錄,這部分詳情可以看這篇,講的很完善:https://gitbook.tw/chapters/using-git/amend-commit1 但假如可能不只一筆自己想要更改的 commit 訊息,可能很多,那就會需要用到 rebase 的指令互動模式。 git rebase -i 或是 git rebase --interactive -i = –int...
JavaScript的throw用法
js 在拋出錯誤的時候會使用到 throw 提到throw之前要先來介紹一下相同性質的try, catch try…catch它會分成兩個區塊,一個 try 一個 catch 123456try { // 要執行的程式} catch(error) { // ... // 錯誤發生時,上面的就不會執行,改執行這邊} 舉例時間: 12345try { console.apple("apple不是正確的使用方式喔");} catch (e) { console.log("我錯了");} 這段 code 的結果會印出我錯了,如下: 為什麼會發生這樣的結果?這是因為如果try區塊裡面的程式碼假如沒有任何的錯誤,就會直接忽略掉catch區塊裡面的程式碼,反之有錯的話,就會以catch裡面的程式碼為主,而錯誤的try就會中斷執行,所以在這個範例來說,因為try寫錯了,所以會以try裡面的程式碼為主 另外如果catch區塊如果接受了一個參數,就可以直接...
