刚看了javascript高级编程,下图是我理解的部分原型关系图,方块的是属性:

function Person(){}
Person.prototype.name = "wangbajiang";
var person1 = new Person();
问点:既然constructor指向的是包含prototype属性的函数(书上这么说的),那为什么
Person.prototype.constructor会指向Person
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
可以打个比方这么说,比如你(通过new实例出来的新对象)在武林一门派下学得武艺终于出山,不料还是被收拾了,这个时候脑子里突然蹦出了师傅的元神(new实例的构造函数),他出手来了几招,这些招式(方法、属性)其实你都有,因为通过原型链继承而来的,而师傅的这些招式就在他的原型(Person.prototype)上,每一个函数都有constructor属性,它指向的是他所在的构造函数,当然也就是这个Person构造函数了~
当 Person 用 new 调用的时候,它是一个构造函数,即 constructor。其它情况下调用,它不是构造函数,只是一个普通函数。只有在它是构造函数的时候,prototype 才有意义。
Person.prototype是一个对象,这里Person是包含这个prototype属性的那个函数。所以,那句话说“包含 prototype 属性的函数”,在这里是指Person。这里提到的prototype不是一个名称,而是指的特定的这个prototype对象。首先每个
prototype对象都有一个constructor属性指向它的构造函数出现这段代码的原因是,在原型继承时,
很奇怪,
Person.prototype的constructor属性会消失,所以必须要使其constructor属性设置为其构造函数,让原型链不混乱你这什么代码?
能new?瞎搞么不是。。。