是的,我之前已经看过这个问题并得到了回答。但这是我仍然不明白的地方:
如果我创建了一个构造函数,并且没有覆盖函数的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
它是纯粹的调试器魔法吗?
答案 0 :(得分:0)
也许解决方案只是不将原型设置为自定义对象?您可以循环遍历自定义对象的所有属性,并将它们作为属性添加到现有原型中,从而保留原始原型对象的所有属性,例如构造函数。