5

是的,我以前看过这个问题并回答过。但这里是我仍然不明白的:

如果我创建了一个构造函数,并且不覆盖函数的prototype属性,那么我们的自动constructor属性就会挂在函数的prototype属性之外。那是MyConstructor.prototype.constructor === MyConstructor=>真的。伟大的。但是现在当我prototype用自己的对象覆盖而不修补constructor属性时会发生什么?constructornow 上不存在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

它是纯粹的调试器魔法吗?

4

1 回答 1

0

也许解决方案只是将原型设置为您的自定义对象?您可以遍历自定义对象的所有属性,并将它们作为属性添加到现有原型中,从而保留原始原型对象的所有属性,例如构造函数。

于 2012-05-11T22:03:02.247 回答