不同原型的Javascript对象构造器混淆

Javascript Object Constructors with Different Prototypes Confusion

本文关键字:构造器 对象 Javascript 原型      更新时间:2023-09-26

我正在研究Javascript对象和原型,据我所知,定义构造函数的两种方式最终会产生类似的结果。

例如,在下面的代码中,相同的构造函数以两种不同的方式定义,但它们最终得到不同的原型值:

var PersonOne = function () {};
function PersonTwo(){};
var p1 = new PersonOne();
var p2 = new PersonTwo();
console.log(p1.constructor.prototype);
console.log(p2.constructor.prototype);
结果:

Object {}
PersonTwo {}

显然我是错的,并定义的构造函数像在PersonOne的结果在一个构造函数的原型是对象。这会影响到遗传。但问题是,造成如此不同结果的原因是什么?

我认为这个问题可能是由于PersonOne函数在运行时被定义,而PersonTwo在解析时?谢谢你的帮助。

不同之处在于PersonOne已被分配了匿名函数表达式的结果。命名变量只是该函数的别名,但是构造函数本身没有.name属性。

如果你声明了它:

var PersonOne = function MyPersonOne() {};

则作为new PersonOne创建的对象的原型将是MyPersonOne

这很重要——它确保你不能仅仅通过创建构造函数的别名来创建任意"类型"的对象。对象的"类型"必须与构造函数的(实际)名称相同。