还有一个"如何找到Javascript对象的类/构造函数名称"?

cur*_*rtc 5 javascript

是的,我之前见过这个问题并得到了回答.但这是我仍然不明白的:

如果我创建一个构造函数,并且不覆盖函数的prototype属性,那么我们将自动constructor属性挂在函数的prototype属性上.那是MyConstructor.prototype.constructor === MyConstructor=>真的.大.但是现在当我prototype用自己的对象覆盖并且不修补constructor属性时会发生什么?constructor现在不存在prototype,如果只引用原型链,那就是MyConstructor.prototype.constructor === Object=> true.精细.所以...

为什么在Javascript调试器(如Chrome)中,如果我用自己的对象覆盖构造函数的原型,然后新建一个构造函数的实例,然后在命令行上键入该实例变量,Chrome很高兴地告诉我类型?怎么知道??? 即我能做些什么来通过代码找出相同的东西?

简单的repro:

> function Foo() {}
undefined
> Foo.prototype.constructor === Foo
true
> Foo.prototype = {}
Object
> Foo.prototype.constructor === Foo
false
> f = new Foo()
Foo
> f
Foo
Run Code Online (Sandbox Code Playgroud)

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

JKi*_*ing 0

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