繁体   English   中英

Constructor.prototype不在原型链中?

[英]Constructor.prototype not in the prototype chain?

相关: 关于原型链,基元和对象的混淆

在Firebug控制台中:

a = 12
a.constructor.prototype.isPrototypeOf(a) // prints 'false'

我认为这应该是true

a = 12创建一个原始数字,它与Number对象不完全相同。 为了属性访问的目的,基元被隐式地转换为对象。

a = 12; //a is a primitive
b = new Number(12); //b is an object
a.constructor.prototype.isPrototypeOf(a); //false because a is primitive
b.constructor.prototype.isPrototypeOf(b); //true because b is an object

根据ECMAScript规范

使用参数V调用isPrototypeOf方法时,将执行以下步骤:

  1. 如果V不是对象,则返回false

严格来说,原始数字不是对象。

a = new Number(12);
a.constructor.prototype.isPrototypeOf(a) // prints 'true'

我不够聪明,告诉你为什么我只知道它是这样的。 是的,这很奇怪。

现在,你可以说12是一个原始的, new Number(12)是一个对象”。 但你怎么解释这个?

(12).toFixed(3); // "12.000"

显然,某些地方JavaScript正在决定原始可能也是一个对象。

为什么存在这种区别? 你如何在两种形式之间转换? 这对性能有何影响? 所有与此问题相关的问题我都没有答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM