20200305
- date: 20200305
- author: czhang
Plan
你不知道的 JS 第二部分 第五章
Notes
1. “类”函数
任何一个函数 Foo 都会有一个 prototype 属性(公有且不可枚举属性),指向一个对象,这个对象为 Foo 的原型
函数是否为构造函数,就看是否用 new 来调用, 因为 new 调用为 构造函数调用
当使用 var a = new Foo() 时,其实相当于 把 a 内部的 [[prototype]] 关联到 Foo.prototype 上,因此获取 a 的属性其实是没有的,然后取 a 的[[ prototype]]链上的对应属性, 也就是 Foo.prototype 上的对应属性
默认 声明函数 Foo 时,Foo.prototype.constructor === Foo
因此, var a = new Foo() 时,a.constructor = Foo
2. 检查类关系
- 检查一个对象的委托关系
- a instanceof Foo ===> 只能检查 a 和 带 prototype 的关系
- b.isPrototypeOf(c)
- __proto__ 类似一种 getter/setter
Object.defineProperty(Object.protorype, '__proto__', {
get: function() {
return Object.getPrototypeOf(this);
},
set: function(o) {
Object.setPrototypeOf(this, o);
return o;
}
});