错误观点
foo.constructor === Foo为真,意味着foo确实有一个指向 Foo 的 .constructor 属性
正确含义
foo.constructor 会委托 [[Prototype]] 链上的 Foo. prototype,因为默认的 Foo.prototype 对象有constructor属性
当重写Foo.prototype之后,Foo.prototype 对象的constructor 属性会丢失,它会继续委托,委托给原型链顶端的 Object.prototype
要在 Foo.prototype 上“修复”丢失的 constructor 属性,可以手动在 Foo.prototype上添加一个不可枚举的constructor 属性