是的,我以前看过这个问题并回答过。但这是我仍然不明白的地方:
如果我创建一个构造函数,并且不覆盖该函数的 prototype
属性,那么我们将自动 constructor
属性卡在该函数的 prototype
属性。即 MyConstructor.prototype.constructor === MyConstructor
=> true。伟大的。但是现在当我用我自己的对象覆盖 prototype
并且不修补 constructor
属性时会发生什么? constructor
现在不存在于 prototype
上,如果仅在原型(prototype)链上找到引用,即 MyConstructor.prototype.constructor === Object
=> 真。美好的。所以……
为什么在 Javascript 调试器(如 Chrome)中,如果我用我自己的对象覆盖构造函数的原型(prototype),并新建该构造函数的实例,然后在命令行中键入该实例变量,Chrome 会愉快地告诉我的类型?它怎么知道??? IE。如何通过代码找出相同的东西?
简单重现:
> function Foo() {}
undefined
> Foo.prototype.constructor === Foo
true
> Foo.prototype = {}
Object
> Foo.prototype.constructor === Foo
false
> f = new Foo()
Foo
> f
Foo
它是纯粹的调试器魔术吗?
最佳答案
也许解决方案只是不将原型(prototype)设置为您的自定义对象?您可以遍历自定义对象的所有属性,并将它们作为属性添加到现有原型(prototype)中,从而保留原始原型(prototype)对象的所有属性,例如构造函数。
关于javascript - 还有一个 "how to find the class/constructor name of a Javascript object"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458996/