[英]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
方法时,将执行以下步骤:
- 如果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.