学习笔记 2020-11-28
JavaScript 高级程序设计(第4版) 阅读记录
JavaScript API
Atomics 与 SharedArrayBuffer
SharedArrayBuffer
原子操作基础
- 算数及位操作方法
- 原子读和写
- 原子交换
- 原子 Futex 操作与加锁
跨上下文消息
XDM 实现不同源或不同工作线程间传递信息。
- postMessage()
Encoding API
批量编码
- TextEncoder
现代 JavaScript 教程
原型方法,没有 __proto__
的对象
任务
为 directionary 添加 toString 方法
这儿有一个通过
Object.create(null)
创建的,用来存储任意key/value
对的对象dictionary
。为该对象添加
dictionary.toString()
方法,该方法应该返回以逗号分隔的所有键的列表。你的toString
方法不应该在使用for...in
循环遍历数组的时候显现出来。它的工作方式如下:
let dictionary = Object.create(null); // 你的添加 dictionary.toString 方法的代码 // 添加一些数据 dictionary.apple = "Apple"; dictionary.__proto__ = "test"; // 这里 __proto__ 是一个常规的属性键 // 在循环中只有 apple 和 __proto__ for(let key in dictionary) { alert(key); // "apple", then "__proto__" } // 你的 toString 方法在发挥作用 alert(dictionary); // "apple,__proto__"
let dictionary = Object.create(null, { toString: { // 定义 toString 属性 value() { // value 是一个 function return Object.keys(this).join(); } } });
调用方式的差异
让我们创建一个新的
rabbit
对象:function Rabbit(name) { this.name = name; } Rabbit.prototype.sayHi = function() { alert(this.name); }; let rabbit = new Rabbit("Rabbit");
以下调用做的是相同的事儿还是不同的?
rabbit.sayHi(); Rabbit.prototype.sayHi(); Object.getPrototypeOf(rabbit).sayHi(); rabbit.__proto__.sayHi();
不同。
第一行使用 rabbit 调用。
第二行使用原型调用。
第三行使用原型调用。
第四行使用原型调用