gpt4 book ai didi

具有不同原型(prototype)的 Javascript 对象构造函数混淆

转载 作者:行者123 更新时间:2023-11-28 20:34:03 26 4
gpt4 key购买 nike

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

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

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 中那样定义构造函数会产生一个原型(prototype)为 Object 的构造函数。这会影响继承。但问题是,到底是什么原因造成了如此不同的结果呢?

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

最佳答案

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

如果您已声明它:

var PersonOne = function MyPersonOne() {};

那么作为new PersonOne创建的对象的原型(prototype)将是MyPersonOne

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

关于具有不同原型(prototype)的 Javascript 对象构造函数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15784404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com