20200305

@czhang
  • date: 20200305
  • author: czhang

Plan

你不知道的 JS 第二部分 第五章

Notes

1. “类”函数

  1. 任何一个函数 Foo 都会有一个 prototype 属性(公有且不可枚举属性),指向一个对象,这个对象为 Foo 的原型

  2. 函数是否为构造函数,就看是否用 new 来调用, 因为 new 调用为 构造函数调用

  3. 当使用 var a = new Foo() 时,其实相当于 把 a 内部的 [[prototype]] 关联到 Foo.prototype 上,因此获取 a 的属性其实是没有的,然后取 a 的[[ prototype]]链上的对应属性, 也就是 Foo.prototype 上的对应属性

  4. 默认 声明函数 Foo 时,Foo.prototype.constructor === Foo

    因此, var a = new Foo() 时,a.constructor = Foo

2. 检查类关系

  1. 检查一个对象的委托关系
    1. a instanceof Foo ===> 只能检查 a 和 带 prototype 的关系
    2. b.isPrototypeOf(c)
  2. __proto__ 类似一种 getter/setter
Object.defineProperty(Object.protorype, '__proto__', {
    get: function() {
        return Object.getPrototypeOf(this);
    },
    set: function(o) {
        Object.setPrototypeOf(this, o);
        return o;
    }
});

More