原型

constructor

函数以 new 调用时,跟一般调用大相径庭,此时函数被用作 constructor,

function A() {
  this.label = 'a'
}
var a = new A()
console.log(a instanceof A) // true

涉及到三个对象 A, A.prototype, a,它们的关系

A.prototype.constructor === A
a.__proto__ === A.prototype
a instanceof A

原型链 A.prototype > Object.prototype > null

console.dir(a)

__proto__

__proto__ 获取对象的原型(不要与 constructor 的 .prototype 属性混了)。它不是标准属性,不过现在浏览器都实现了。它是一个 accessor,读相当于 Object.getPrototypeOf(),写相当于 Object.setPrototypeOf()

Object.create()

Object.create({}, {
    prop: { value: undefined, writable: false, enumerable: false, configurable: false }
})

Object.create(null)