是的,我以前看过这个问题并回答过。但这里是我仍然不明白的:
如果我创建了一个构造函数,并且不覆盖函数的prototype
属性,那么我们的自动constructor
属性就会挂在函数的prototype
属性之外。那是MyConstructor.prototype.constructor === MyConstructor
=>真的。伟大的。但是现在当我prototype
用自己的对象覆盖而不修补constructor
属性时会发生什么?constructor
now 上不存在prototype
,并且如果仅在原型链上找到引用,则MyConstructor.prototype.constructor === Object
=> true。美好的。所以...
为什么在 Javascript 调试器(如 Chrome)中,如果我用自己的对象覆盖构造函数的原型,并新建该构造函数的实例,然后在命令行上键入该实例变量,Chrome 会高兴地告诉我类型? 它怎么知道???即我能做些什么来通过代码找出同样的事情?
简单的复制:
> function Foo() {}
undefined
> Foo.prototype.constructor === Foo
true
> Foo.prototype = {}
Object
> Foo.prototype.constructor === Foo
false
> f = new Foo()
Foo
> f
Foo
它是纯粹的调试器魔法吗?