0

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

例如,在这段代码中,完全相同的构造函数以 2 种不同的方式定义,但它们最终具有不同的原型值:

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 中那样定义构造函数会导致构造函数的原型是 Object。那会影响继承。但问题是,造成如此不同结果的原因是什么?

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

4

1 回答 1

3

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

相反,如果您声明了它:

var PersonOne = function MyPersonOne() {};

那么作为 a 创建的对象的原型new PersonOne就是MyPersonOne

这很重要 - 它确保您不能仅通过为构造函数创建别名来创建任意“类型”的对象。对象的“类型”必须与构造函数的(真实)名称相同。

于 2013-04-03T10:07:30.990 回答