javascript - 还有一个 "how to find the class/constructor name of a Javascript object"?

标签 javascript

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

如果我创建一个构造函数,并且不覆盖该函数的 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/

相关文章:

javascript - 使用 Jest ("Cannot read property ' __extends' of null 进行单元测试 typescript 类”)

javascript - John Resig 的 perf 函数

javascript - 从标签中获取值并将其添加到 jQuery 中

javascript - 什么时候应该在 Typescript 中显式添加类型注释?

javascript mootools 平滑滚动 'x' 像素量

javascript - jQueryparents() 和parent().parent() 只能看到上一级?

javascript - `2 == {}` 和 `{} == 2` 有什么区别

javascript - 转义小于/大于 javascript

javascript - 如何在 React 中使用外部 jquery 插件

javascript - 如何在 Phonegap 中存储多维数组