Javascript 为什么Object.getPrototypeOf(instance.constructor)不等于instance.constructor.prototype?
标题说明了一切,但代码如下:Javascript 为什么Object.getPrototypeOf(instance.constructor)不等于instance.constructor.prototype?,javascript,ecmascript-6,prototype,Javascript,Ecmascript 6,Prototype,标题说明了一切,但代码如下: class A {} class B extends A {} const b = new B() Object.getPrototypeOf(b.constructor) === b.constructor.prototype // false Object.getPrototypeOf(b.constructor) === A // true b.constructor.prototype === A // false. why? 我的意思是,上面的代
class A {}
class B extends A {}
const b = new B()
Object.getPrototypeOf(b.constructor) === b.constructor.prototype // false
Object.getPrototypeOf(b.constructor) === A // true
b.constructor.prototype === A // false. why?
我的意思是,上面的代码是违反直觉的。为什么要这样做
\uuuu proto\uuu
和prototype
不一样
假设您有一个对象obj
。现在,obj.prototype
实际上不会像您预期的那样为您提供obj
的原型。要获得obj
的原型,您必须执行obj.\uuuu proto\uuuu
。运行以下代码,您将得到答案。另外,请阅读以了解有关\uuuu proto\uuu
和prototype
之间差异的更多信息:)
class A{}
类B扩展了{}
常数b=新的b()
console.log(Object.getPrototypeOf(b.constructor)==b.constructor.\uuu proto\uuuu)//true
console.log(Object.getPrototypeOf(b.constructor)==A)//true
console.log(b.constructor.\uuu proto\uuu==A)//true
在代码中:
b.constructor.prototype === A; // false
这是错误的,因为b的原型是A的原型,而不是A本身。这听起来可能让人困惑,所以我在下面留下了一个例子:
class A{}
类B扩展了{}
常数b=新的b()
Object.getPrototypeOf(b.constructor)==b.constructor.prototype//false
Object.getPrototypeOf(b.constructor)==A//true
b、 constructor.prototype==A//false。为什么?
console.dir(b.constructor.uuu proto_uuu==A);//真的
谢谢你的链接Object.getPrototypeOf
不仅仅访问.prototype
属性,它还获取从HMM继承的对象的内部链接。。你回答的第一行立刻让我觉得自己像个白痴,因为这太明显了。。。谢谢大家!Object.getPrototypeOf
与\uuu-prototypeof(obj)
获得obj的原型是一样的,你必须做obj.\uuu-prototypeof
”-不,你必须做Object.getPrototypeOf(obj)
@CertainPerformance不,不是\uuuu proto\uuuu
已被弃用,甚至不能在所有对象上运行。