Javascript 在这种情况下,`.constructor`为什么指向`object`?

Javascript 在这种情况下,`.constructor`为什么指向`object`?,javascript,constructor,prototype,Javascript,Constructor,Prototype,在以下示例中: var A = function() {}; var a = new A(); var b = new A(); A.prototype.member1 = 10; A.prototype = {} var c = new A(); 现在a.constructor和b.constructor都指向函数a,这是预期的。 然而,c.constructor指向一个void对象 这背后的理由是什么?谢谢 现在a.constructor和b.constructor都指向函数 A、 这是

在以下示例中:

var A = function() {};
var a = new A();
var b = new A();
A.prototype.member1 = 10;

A.prototype = {}
var c = new A();
现在a.constructor和b.constructor都指向函数a,这是预期的。 然而,c.constructor指向一个void对象

这背后的理由是什么?谢谢

现在a.constructor和b.constructor都指向函数 A、 这是意料之中的。然而,c.constructor指向了一个空白 对象 a和b都将原始a.prototype对象作为其内部[[prototype]],该对象具有引用a的构造函数属性。因此,执行此操作时:

这背后的理由是什么?谢谢

使用的是继承的构造函数属性

然后用一个没有构造函数属性的新空对象替换原始原型对象。替换构造函数的原型并不会改变现有实例的内部[[prototype]],它们仍然引用在构造它们时是原型的对象

新对象将仅用作新实例的[[Prototype]],因此在构造c时,它的内部[[Prototype]]就是这个没有构造函数属性的新对象,因此它将沿着[[Prototype]]链继续,直到在object.Prototype上找到构造函数属性为止,后者引用对象构造函数

var A=函数{}; var a=新的a; var b=新的A; A.prototype.member1=10; //替换原型 A.prototype={} var c=新的A; //a仍然使用原始原型,因此继承member1 console.loga.member1;//10 //c使用普通对象,因此没有member1属性 console.logc.member1;//未定义 //c从Object.prototype继承构造函数属性,因此 //引用对象构造函数
console.logc.constructor==对象;//true@RobGObject.prototype.constructor==对象就是他的意思我正在为c.constructor获取对象,而不是undefined@Bergi-啊,是的,当然,它是通过对象。原型…固定。
a.constructor