0%

学习笔记 2020 11 28

学习笔记 2020-11-28

JavaScript 高级程序设计(第4版) 阅读记录

JavaScript API

Atomics 与 SharedArrayBuffer

SharedArrayBuffer
原子操作基础
  1. 算数及位操作方法
  2. 原子读和写
  3. 原子交换
  4. 原子 Futex 操作与加锁

跨上下文消息

XDM 实现不同源或不同工作线程间传递信息。

  • postMessage()

Encoding API

批量编码
  • TextEncoder

现代 JavaScript 教程

原型方法,没有 __proto__ 的对象

任务

  1. 为 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();
        }
      }
    });
  2. 调用方式的差异

    让我们创建一个新的 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 调用。

    第二行使用原型调用。

    第三行使用原型调用。

    第四行使用原型调用