狠狠撸
Submit Search
9. meta-programming
Nov 18, 2019
Download as PPTX, PDF
0 likes
369 views
Justin Lin
探索物件特性 判斷物件型態 認識Reflect API 結合Proxy與Reflect API
Read more
1 of 58
Download now
Downloaded 31 times
Ad
Recommended
10. 進入瀏覽器
10. 進入瀏覽器
Justin Lin
?
script標籤基本特性 認識async與defer 初探同源策略與CORS 認識ES6前的模組管理 使用ECMAScript模組
11. DOM、事件與樣式
11. DOM、事件與樣式
Justin Lin
?
認識DOM操作 處理事件 掌握樣式 建立程式庫封裝細節
从模组到类别
从模组到类别
Justin Lin
?
深入模組管理 初識物件導向 學習定義類別 定義運算子
2. 型態、變數與運算子
2. 型態、變數與運算子
Justin Lin
?
使用REPL 認識內建型態 使用 let、const、var 宣告變數 掌握型態轉換
5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
?
認識建構式之作用 理解原型鏈機制 區別原型與類別典範 善用類別語法
6. 非同步設計
6. 非同步設計
Justin Lin
?
區別同步與非同步 運用Promise API 善用async、await 認識for-await-of 使用非同步產生器函式
4. 使用物件
4. 使用物件
Justin Lin
?
掌握this參考 運用物件實字 認識物件協定 使用符號協定
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
并行、平行与非同步
并行、平行与非同步
Justin Lin
?
認識并行、平行与非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
并行与平行
并行与平行
Justin Lin
?
《Python 3.5 技術手冊》第 13 章投影片
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
這個投影片是搭配《Java Tutorial》課程,你可以在 CodeData 上看到所有內容,也可以直接在 Google Play 或 Pubu 上搜尋 "Java Tutorial" 以購得電子書。
自订泛型、列举与标註
自订泛型、列举与标註
Justin Lin
?
進階自訂泛型 進階自訂列舉 使用標準標註 自訂與讀取標註
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
Java SE 7 技術手冊投影片第 16 章 - 自订泛型、列举与标註
Java SE 7 技術手冊投影片第 16 章 - 自订泛型、列举与标註
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 18 章 - 自订泛型、列举与标註
Java SE 8 技術手冊第 18 章 - 自订泛型、列举与标註
Justin Lin
?
進階自訂泛型 進階自訂列舉 使用標準標註 自訂與讀取標註
颁贬10:输入输出
颁贬10:输入输出
Justin Lin
?
瞭解串流與輸入輸出 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用輸入輸出裝飾器
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
Justin Lin
?
開發環境準備與使用 ? 了解Web應用程式架構 ? Servlet撰寫與部署設定 ? 了解URI模式對應 ? 使用web-fragement.xml
资料永续与交换
资料永续与交换
Justin Lin
?
《Python 3.5 技術手冊》第 10 章投影片
流程语法与函式
流程语法与函式
Justin Lin
?
《Python 3.5 技術手冊》第 4 章投影片
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
?
Java SE 7 技術手冊
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
使用 Tag File 自訂標籤 使用 Simple Tag 自訂標籤 使用 Tag 自訂標籤
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
?
Java SE 7 技術手冊
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
?
Java SE 7 技術手冊
颁贬19:深入模组化
颁贬19:深入模组化
Justin Lin
?
認識模組的種類 處理模組依賴與封裝細節 使用模組API 建立JAR、JMOD與JIMAGE
颁贬16:整合资料库
颁贬16:整合资料库
Justin Lin
?
了解JDBC架構 使用JDBC API 瞭解交易與隔離層級 認識RowSet
Introduction the Repository Pattern
Introduction the Repository Pattern
Bill Lin
?
ASP.NET MVC with Repository Pattern
Chapter 4 models
Chapter 4 models
Ekman Hsieh
?
顿箩补苍驳辞读书会
Ad
More Related Content
What's hot
(20)
10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
并行、平行与非同步
并行、平行与非同步
Justin Lin
?
認識并行、平行与非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
并行与平行
并行与平行
Justin Lin
?
《Python 3.5 技術手冊》第 13 章投影片
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
這個投影片是搭配《Java Tutorial》課程,你可以在 CodeData 上看到所有內容,也可以直接在 Google Play 或 Pubu 上搜尋 "Java Tutorial" 以購得電子書。
自订泛型、列举与标註
自订泛型、列举与标註
Justin Lin
?
進階自訂泛型 進階自訂列舉 使用標準標註 自訂與讀取標註
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
Java SE 7 技術手冊投影片第 16 章 - 自订泛型、列举与标註
Java SE 7 技術手冊投影片第 16 章 - 自订泛型、列举与标註
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 18 章 - 自订泛型、列举与标註
Java SE 8 技術手冊第 18 章 - 自订泛型、列举与标註
Justin Lin
?
進階自訂泛型 進階自訂列舉 使用標準標註 自訂與讀取標註
颁贬10:输入输出
颁贬10:输入输出
Justin Lin
?
瞭解串流與輸入輸出 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用輸入輸出裝飾器
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
Justin Lin
?
開發環境準備與使用 ? 了解Web應用程式架構 ? Servlet撰寫與部署設定 ? 了解URI模式對應 ? 使用web-fragement.xml
资料永续与交换
资料永续与交换
Justin Lin
?
《Python 3.5 技術手冊》第 10 章投影片
流程语法与函式
流程语法与函式
Justin Lin
?
《Python 3.5 技術手冊》第 4 章投影片
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
?
Java SE 7 技術手冊
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
使用 Tag File 自訂標籤 使用 Simple Tag 自訂標籤 使用 Tag 自訂標籤
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
?
Java SE 7 技術手冊
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
?
Java SE 7 技術手冊
颁贬19:深入模组化
颁贬19:深入模组化
Justin Lin
?
認識模組的種類 處理模組依賴與封裝細節 使用模組API 建立JAR、JMOD與JIMAGE
颁贬16:整合资料库
颁贬16:整合资料库
Justin Lin
?
了解JDBC架構 使用JDBC API 瞭解交易與隔離層級 認識RowSet
10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
并行、平行与非同步
并行、平行与非同步
Justin Lin
?
并行与平行
并行与平行
Justin Lin
?
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
自订泛型、列举与标註
自订泛型、列举与标註
Justin Lin
?
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
Java SE 7 技術手冊投影片第 16 章 - 自订泛型、列举与标註
Java SE 7 技術手冊投影片第 16 章 - 自订泛型、列举与标註
Justin Lin
?
Java SE 8 技術手冊第 18 章 - 自订泛型、列举与标註
Java SE 8 技術手冊第 18 章 - 自订泛型、列举与标註
Justin Lin
?
颁贬10:输入输出
颁贬10:输入输出
Justin Lin
?
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
Justin Lin
?
资料永续与交换
资料永续与交换
Justin Lin
?
流程语法与函式
流程语法与函式
Justin Lin
?
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
?
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
?
颁贬19:深入模组化
颁贬19:深入模组化
Justin Lin
?
颁贬16:整合资料库
颁贬16:整合资料库
Justin Lin
?
Similar to 9. meta-programming
(20)
Introduction the Repository Pattern
Introduction the Repository Pattern
Bill Lin
?
ASP.NET MVC with Repository Pattern
Chapter 4 models
Chapter 4 models
Ekman Hsieh
?
顿箩补苍驳辞读书会
贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程
Shilong Sang
?
贬颈产别谤苍补迟别教程
kotlin-big-nerd-ranch ch4 function
kotlin-big-nerd-ranch ch4 function
MinHan Hong
?
kotlin-big-nerd-ranch ch4 function
闯补惫补蝉肠谤颈辫迟进阶编程
闯补惫补蝉肠谤颈辫迟进阶编程
iflytek
?
讲述箩补惫补蝉肠谤颈辫迟面向对象编程的一些要点
A brief introduction to Machine Learning
A brief introduction to Machine Learning
Wen-Tien Chang
?
Video: https://www.youtube.com/watch?v=M_DUmyRIkQ8&list=PLTUHmtFhYC6iEwu4h2REYhNKCHFFHYngS&index=13
Code guidelines
Code guidelines
Jeffray Huang
?
code guidelines for C#
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
zhoujg
?
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
appuniverz
?
講者Luba Tang是來自聯發科的軟體架構師。在此次的AU Talk,他與聽眾們分享他軟體的開發經驗,以實務的角度出發,告訴我們要如何有效率、有次序地開發一個軟體。 軟體是集眾人的智慧,一起做出有用的東西,成就有用的人。軟體的生產要素是人。人是有情緒的,不完美的,有缺陷的。如何集眾人之力,讓事情發生,可以說是開發軟體時真正的挑戰。
運用MMLSpark 來加速Spark 上機器學習專案
運用MMLSpark 來加速Spark 上機器學習專案
Herman Wu
?
運用MMLSpark 來加速Spark 上機器學習專案
Reactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET Core
Chen-Tien Tsai
?
使用 Akka.NET 與 .NET Core 建立響應式應用程式
全文搜寻引擎的进阶实作与应用
全文搜寻引擎的进阶实作与应用
建興 王
?
开源应用日志收集系统
开源应用日志收集系统
klandor
?
开源应用日志收集系统
Spark tutorial
Spark tutorial
Lin JiaMing
?
spark tutorial
Model 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
?
在 2015 年 7 月至新北市樹林國小舉辦 Laravel 工作坊,讓參與的學員在 30 個小時內學會使用 Laravel 建置一個具 Open ID 認證功能的網路應用程式。
美团前端架构介绍
美团前端架构介绍
pan weizeng
?
Model 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
?
在 2015 年 5 月,我們與臺中科大資工系合作,舉辦 Laravel 工作坊,讓參與的學員在 20 個小時內學會使用 Laravel 建置一個簡易的 Blog 系統。
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
liuts
?
高级笔贬笔应用程序漏洞审核技术
高级笔贬笔应用程序漏洞审核技术
wensheng wei
?
Postgre sql intro 0
Postgre sql intro 0
March Liu
?
a slide for psotgresql
Introduction the Repository Pattern
Introduction the Repository Pattern
Bill Lin
?
Chapter 4 models
Chapter 4 models
Ekman Hsieh
?
贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程
Shilong Sang
?
kotlin-big-nerd-ranch ch4 function
kotlin-big-nerd-ranch ch4 function
MinHan Hong
?
闯补惫补蝉肠谤颈辫迟进阶编程
闯补惫补蝉肠谤颈辫迟进阶编程
iflytek
?
A brief introduction to Machine Learning
A brief introduction to Machine Learning
Wen-Tien Chang
?
Code guidelines
Code guidelines
Jeffray Huang
?
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
信息系统开发平台翱辫别苍贰虫辫谤别蝉蝉础辫辫
zhoujg
?
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
appuniverz
?
運用MMLSpark 來加速Spark 上機器學習專案
運用MMLSpark 來加速Spark 上機器學習專案
Herman Wu
?
Reactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET Core
Chen-Tien Tsai
?
全文搜寻引擎的进阶实作与应用
全文搜寻引擎的进阶实作与应用
建興 王
?
开源应用日志收集系统
开源应用日志收集系统
klandor
?
Spark tutorial
Spark tutorial
Lin JiaMing
?
Model 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
?
美团前端架构介绍
美团前端架构介绍
pan weizeng
?
Model 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
?
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
liuts
?
高级笔贬笔应用程序漏洞审核技术
高级笔贬笔应用程序漏洞审核技术
wensheng wei
?
Postgre sql intro 0
Postgre sql intro 0
March Liu
?
Ad
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
認識 Spring Boot 認識 Spring Tool Suite 遷移微網誌至 Spring Boot
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
使用 Gradle 結合 Gradle 與 IDE 認識相依注入 使用 Spring 核心
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
寄送純文字郵件 寄送 HTML 郵件 寄送附檔郵件
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
了解 Java EE 安全概念與名詞 使用容器基本驗證與表單驗 使用 HTTPS 保密資料傳輸
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
了解 JDBC 架構 使用基本的 JDBC 透過 JNDI 取得DataSource 在 Web 應用程式整合資料庫
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
了解何謂 JSTL 使用 JSTL 核心標籤庫 使用 JSTL 格式標籤庫 使用 JSTL XML 標籤庫 使用 JSTL 函式標籤庫
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
了解 JSP 生命週期 使用 JSP 語法元素 使用 JSP 標準標籤 使用運算式語言(EL) 自訂 EL 函式
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
了解 Servlet 生命週期 使用 ServletConfig 與ServletContext 使用 PushBuilder 各種傾聽器的使用 繼承 HttpFilter 實作過濾器
Ch04 會話管理
Ch04 會話管理
Justin Lin
?
了解會話管理基本原理 使用 Cookie 類別 使用 HttpSession 會話管理 了解容器會話管理原理
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
取得請求參數與標頭 處理中文字元請求與回應 設定與取得請求範圍屬性 使用轉發、包含、重新導向
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
開發環境準備與使用 了解 Web 應用程式架構 Servlet 撰寫與部署設定 了解 URI 模式對應 使用 web-fragement.xml
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
認識 HTTP 基本特性 了解何為 URI 編碼 認識 Web 容器角色 了解 Servlet 與 JSP 的關係 認識 MVC/Model 2
14. 進階主題
14. 進階主題
Justin Lin
?
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
認識并行、平行与非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
使用 pdb 模組除錯 對程式進行單元測試 使用 timeit 評測程式片段 使用 cProfile(profile)察看評測數據
11. 常用內建模組
11. 常用內建模組
Justin Lin
?
處理日期與時間 認識日誌的使用 運用規則表示式 管理檔案與目錄 URL 處理
9. 資料結構
9. 資料結構
Justin Lin
?
認識 hashable、iterable、orderable 對物件進行排序 認識群集架構 運用 collections 模組 運用 collections.abc 模組
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
7. 例外處理
7. 例外處理
Justin Lin
?
使用 try、except 處理例外 認識例外繼承架構 認識 raise 使用時機 運用 finally 清除資源 使用 with as 管理資源
6. 類別的繼承
6. 類別的繼承
Justin Lin
?
瞭解繼承目的 認識鴨子定型 重新定義方法 認識 object 建立、尋找文件資源 泛型入門
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
14. 進階主題
14. 進階主題
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
11. 常用內建模組
Justin Lin
?
9. 資料結構
9. 資料結構
Justin Lin
?
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
7. 例外處理
7. 例外處理
Justin Lin
?
6. 類別的繼承
6. 類別的繼承
Justin Lin
?
Ad
9. meta-programming
2.
9. meta-programming ? 學習目標 –
探索物件特性 – 判斷物件型態 – 認識Reflect API – 結合Proxy與Reflect API 2
3.
? meta前置詞源於希臘文,原本相當於之後 (after)、超越(beyond)之意 ? 後續衍生出許多意義,像是關於(about) –
metadata是「與資料相關的資料」(data about data) 3
4.
? meta-programming可以對比為「與程式 設計相關的程式設計」(programming about programming) ?
不同於靜態的data,programming是動態 的,「meta-programming從事的程式設 計,會影響另一個程式設計」 4
5.
? 就JavaScript而言… ? 檢視程式行為、修改程式行為,甚至是修 改語言預設行為等,可以令程式受到影響 的程式設計 5
6.
修補API 6
7.
? 要運用這種手法,必須是特性值不會被設 為Falsy family成員的情況 ?
如果無法避免這類情況,必須做更嚴格的 檢查 7
8.
8
9.
特性/值清單 ? for..in針對的是實例本身以及繼承而來 的可列舉(emnuerable)特性 ? propertyIsEnumerable() 9
10.
? Object.keys() ? Object.values() ?
Object.entries() 10
11.
? Object.getOwnPropertyNames() ? Object.getOwnPropertySymbols() 11
12.
特性順序 ? EnumerateObjectProperties規範只從實 例本身以及原型鏈取得可列舉特性,for in就是實作之一 ? 沒有規範順序排列問題,因此for
in列舉 的特性順序因不同引擎實作而有所差別 ? Object.keys()的順序是依賴在實作品 12
13.
? [[OwnPropertyKeys]]規範如何取得自身 特性,也定義了順序 – 會先考慮數字索引,以數字遞增方式取得,接 著是特性被建立的順序,然後才是符號被建立 的順序 ?
採用的函式有… – Object.getOwnPropertyNames() – Object.getOwnPropertySymbols() – Reflect.ownKeys() 13
14.
物件型態 ? 對於基本型態、函式、undefined、 Function實例的話,許多場合會使用 typeof,對於其他的物件型態 ? 如果想判斷物件是否屬於某個繼承關係, 常見使用instanceof ?
在沒有進一步定義下,instanceof的判 斷依據是原型鏈 14
15.
? Symbol.hasInstance靜態方法傳回值決 定了使用instanceof判斷時,受測實例 是否被視為此類別型態 15
16.
constructor特性 ? 不是個別實例擁有,而是建構式或類別 prototype上的特性 ? 也常見作為型態檢測的依據 ?
constructor可以修改 ? 使用原型鏈實現繼承時,建議設定 constructor指向子建構式 ? 使用類別語言定義子類別時,會自動設定 constructor特性 16
17.
Object.prototype.toString() ? ECMAScript規範要求呼叫後,必須傳回 '[object class]'格式的字串 17
18.
? 基於對標準的支持,不少程式庫也會使用 這個來作為標準內建型態的判斷依據 ? ES5以前,沒有方式可以調整'[object class]'格式中'class'的部份 ?
Object.prototype.toString()實際 上是取得引擎內部實作[[Class]]的資訊 18
19.
? ES6在定義建構或類別時,可以定義 Symbol.toStringTag特性,決定 '[object class]'格式'class'的部份 19
20.
20
21.
真陣列? ? Array.isArray()就是根據內部實作特 性[[Class]]的值'Array‘ ? 在ES5剛釋出的那個年代,若想修補 Array.isArray()該怎麼做呢? 21
22.
? 真正的Array.isArray()看的是[[Class]] 22
23.
Symbol.species ? 陣列的方法執行後若傳回陣列,使用類別 語法繼承Array的子型態,呼叫這類方法 後傳回的物件也會是子型態 ? 指定子類別要使用哪個類別來建構實例 23
24.
24
25.
25
26.
物件相等性 ? == ? === ?
SameValueZero ? SameValue 26
27.
? Set元素、Map的鍵在比較相等性時,使用 SameValueZero演算 – 採用===,然而NaN等於NaN,0等於-0。 ?
SameValue演算與SameValueZero演算不 同的地方只在於,0不等於-0, 27
28.
? 採用SameValue演算的API之一是 Object.is()函式 28
29.
? Object.defineProperty()、 Object.defineProperties() 29
30.
? 多數API基本上採用===就好了 ? 如果真的不能避免NaN,或者必須區分0與- 0,就要留意SameValueZero與 SameValue的差別 30
31.
Reflect與Proxy ? ECMAScript規範[[GetPrototypeOf]]、 [[SetPrototypeOf]]、[[IsExtensible]]等 ? 在實現JavaScript引擎時,這類演算實現為 引擎的內部方法(Internal
method) ? 在ES5時,可以存取內部方法的API,隨意 地配置為Object的函式 31
32.
? ES6以後,提供了Reflect API作為存取內 部方法的統一管道,並提供更多的控制細 節 ?
ES6以後也新增Proxy API,提供了干涉內 部方法的時機點,可干涉的點與Reflect API一對一對應 ? 透過Proxy與Reflect的各種結合,就可 為 meta-programming提供諸多的可能性 32
33.
Reflect API ? Object被取代的函式 –
Reflect.getPrototypeOf() – Reflect.setPrototypeOf() – Reflect.isExtensible() – Reflect.preventExtensions() – Reflect.defineProperty() – Reflect.getOwnPropertyDescriptor() 33
34.
? 與Object上相對應的函式,功能上基本相 同 ? 略作調整的地方 –
Object有些對應的函式執行完會傳回物件本 身,而Reflect會傳回布林值 – Object對應的函式target參數若是基本型態, 會使用對應的類別實例來包裹基本型態值,然 而,Reflect在此時會拋出TypeError 34
35.
? 在ES6以後,建議使用Reflect的這些方法, 來取代Object對應的方法 ? 未來與內部方法存取相關的函式,只會在 Reflect上配置 35
36.
36
37.
進階函式控制 ? func.apply(self, args)這類呼叫, 隱含地假設func實例本身沒有定義 apply()方法 ?
若想不想發生同名問題,方式之一是使用 Function.prototype.apply.apply( func, [self, args]) 37
38.
? ES6以後,可以使用Reflect.apply()來 達到相同目的 ? Reflect.apply(func,
self, args) 38
39.
? 定義取值函式或設值函式,如果想控制 this的對象呢? 39
40.
? ES6以後,可以使用Reflect.get()或 Reflect.set() 40
41.
? Reflect.get()或Reflect.set()存取 的是[[GET]]、[[SET]]內部方法 ? 純綷用來當成是存取特性值也是可行的 41
42.
運算子的對應函式 ? in、delete、new運算子使用到內部方法 ? 對應函式Reflect.has()、 Reflect.deleteProperty()、 Reflect.construct() 42
43.
? 非嚴格模式下,對於不可組態的特性, delete刪除失敗會傳回false,若是嚴格 模式,刪除失敗會引發TypeError ? Reflect.deleteProperty()
成功的 話會傳回true,刪除失敗會傳回false 43
44.
? 在建構物件時會使用new運算子, Reflect.construct()是對應的函式 44
45.
? 可以指定建構式中new.target的實際建 構式或類別 45
46.
? new.target代表建構式,建構式的 prototype,會成為實例的原型 46
47.
Proxy API ? 希望能在存取物件特性時進行 console.log(),記錄有哪些特性被存取了? ?
Proxy實例會捕捉(Trap)並呼叫處理器上 定義的對應方法 47
48.
48
49.
代理模式 ? Reflect的函式,與Proxy處理器可設定 的捕捉方法是一對一對應的 ? Proxy實例可捕捉內部方法被操作的時機, 在處理器中Reflect用來存取內部方法 49
50.
? 實作上提供代理物件給客戶端操作,代理 物件具有與目標物件相同介面 ? 在客戶端對實作毫不知情下,不會意識到 正在操作的是代理物件 ?
代理物件可以單純地將任務轉發給目標物 件,或者是在這前後附加額外的邏輯 50
51.
? 明顯地被違反物件既有的協定,試圖實作 代理會拋出TypeError 51
52.
52
53.
this又是誰? 53
54.
54
55.
55
56.
56
57.
57
58.
? 想要有個可撤消的(Revocable)的Proxy 實例,可使用Proxy.revocable()函式 58
Download