新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-2-4
- 最后登录
- 1970-1-1
|
JS 定義的 "Well-known symbols" 主要定義了對象與內建函數與關鍵詞交互的行為,例如 String.prototype.split(separator, limit) 當第一個參數 separator 帶有 Symbol.split 屬性則會優先呼叫該方法,其次才是呼叫 separator.toString() 拆分字符串。用法類似於 Python 中的 __repr__ 和 C++ 中的 operator< 這類 special method。可以參考 ecma262 的 well-known symbols: https://262.ecma-international.org/11.0/#sec-well-known-symbols
也可以用在自己寫的庫中,例如定義一個 SortedList 類,可以額外定義一個 new Symbol('Compare'),當 push 的對象帶有此 Symbol 屬性則呼叫其比較,由於 Symbol 保證 unique 和 immutable,可以確保不與其他第三方庫衝突。
至於為什麼不像 .toString 之類用普通的方式定義交互,我想是為了兼容 ES6 以前的代碼避免內建函數的行為不同。 |
|