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

时间:2012-05-05 05:00:19

标签: javascript

是的,我之前已经看过这个问题并得到了回答。但这是我仍然不明白的地方:

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

为什么在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

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

1 个答案:

答案 0 :(得分:0)

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