不同原型的Javascript对象构造器混淆
Javascript Object Constructors with Different Prototypes Confusion
我正在研究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
。
这很重要——它确保你不能仅仅通过创建构造函数的别名来创建任意"类型"的对象。对象的"类型"必须与构造函数的(实际)名称相同。
相关文章:
- 构造JSON对象
- 为什么可以't我在JavaScript中获取导航器对象的属性计数
- SwfObject寄存器对象
- 在全局声音管理器对象上完成
- 如何专注于YouTube视频播放器对象
- 尝试编写承诺时出错:承诺解析器对象不是函数
- Javascript类构造的对象未定义
- 动态构造ACS对象
- 为什么实例构造函数指向最上面的函数构造函数对象
- 使用变量属性名称构造 JS 对象的简写方法
- 如何从导航器对象中删除 serviceWorker 属性
- Javascript - 测试管理器对象
- 使用作为参数传递的对象创建新对象的构造器
- 在对象构造器onclick事件中创建的HTML按钮不起作用
- 需要帮助修复由于2个javascript对象具有相同的名称,但不同的构造器引起的问题
- 为什么如果构造器的原型改变了,对象的构造器属性也会改变?
- 使用字符串"构造器"JavaScript对象中的关键字
- jQuery对象构造器-方法调用自身
- 不同原型的Javascript对象构造器混淆
- 如何在AngularJS中绑定由函数构造器创建的对象