「電影清單(Vue版本)」技術記錄

總結

專案網址:https://tzynwang.github.io/vue-movie-list/ 根據白板 JavaScript 版本的電影清單,以 Vue 框架重現外觀、分頁與搜尋功能(本篇筆記發布時尚未實作出切換顯示模式與根據電影主題進行篩選的功能)

環境

Vue.js: 2.6.14
os: Windows_NT 10.0.18363 win32 x64

筆記

HTML 部分

JavaScript 部分

main.js

config.js 衍伸筆記

See the Pen object undefined this by Charlie (@Charlie7779) on CodePen.

  1. 問:在呼叫URL2.INDEX_URLURL2.POSTER_URL的時候,得到的內容分別是undefined/api/v1/movies/undefined/posters/,為何this.BASE_URL的值會是undefined,而不是定義好的https://movie-list.alphacamp.io? 答:沒有在 function 內呼叫this的話,this會是目前執行環境的ThisBinding,(若是在瀏覽器環境的話)this就會是window;而window中沒有BASE_URL,自然會回傳undefined

  2. 問:第三個 function POSTER_URL()沒有get關鍵字,在呼叫的時候會直接回傳POSTER_URL() { return this.BASE_URL + "/posters/"; },可為什麼會是回傳一整串字串,而不是只有return後的內容this.BASE_URL + "/posters/"? 答:POSTER_URL()只是一個普通的 function,寫成document.querySelector("#URL1 .POSTER_URL").innerHTML = URL1.POSTER_URL並沒有執行它,改成document.querySelector("#URL1 .POSTER_URL").innerHTML = URL1.POSTER_URL()就正常了;只有URL1.POSTER_URL的話就跟POSTER_URL.valueOf()的結果一樣

  3. 問:get 的用意? 答:getter 其實就相當於POSTER_URL(),就是你 read 此 property 時,會執行此 function MDN: The get syntax binds an object property to a function that will be called when that property is looked up.

// 使用getter
const obj = {
  log: ['a', 'b', 'c'],
  get latest() {
    if (this.log.length === 0) {
      return undefined
    }
    return this.log[this.log.length - 1]
  }
};

console.log(obj.latest) // expected output: "c"
// 不使用getter,直接執行obj.latest()
// 注意與上方的程式碼差在latest後有無()
const obj = {
  log: ['a', 'b', 'c'],
  latest() {
    if (this.log.length === 0) {
      return undefined
    }
    return this.log[this.log.length - 1]
  }
};

console.log(obj.latest()) // expected output: "c"

CSS 部分

補充參考文件