繁体   English   中英

isPrototypeOf() function 在原语上

[英]isPrototypeOf() function on primitive

Mozilla.org指出

isPrototypeOf() 方法检查 object 是否存在于另一个对象的原型链中。

当我创建一个原始变量时,说

var a = 0;

并检查它的 [[Prototype]] (不是a.prototype ),

console.log(a.__proto__); //on chrome

它打印Number {0, isDivisibleBy2: ƒ, constructor: ƒ, toExponential: ƒ, toFixed: ƒ, …} 显然,这个值似乎是Number.prototype里面的值。

所以,我希望Number.prototype.isPrototypeOf(a); 返回 true,因为Number.prototype确实存在于(__proto __ 链) a原型链中。

但取而代之的是Number.prototype.isPrototypeOf(a); 是假的。

 var a = 0; console.log(a.__proto__); console.log(Number.prototype); console.log(Number.prototype === a.__proto__); console.log(Number.prototype.isPrototypeOf(a));

我想我可能误解了一些东西......我相信value.__proto__是访问原型链的正确方法(从这个 mozilla 链接了解)。 仅仅是isPrototypeOf()不适用于原语吗?

有人可以帮我清理并理解这种奇怪的现象吗?

当您访问其上的属性或调用方法时,JavaScript 实际上是从原语中创建一个新的 Number object,然后立即丢弃新的 object。 这就是您可以访问__proto__属性的原因。 然而,原语不是数字 object。

正如您在此处的规范中看到的那样, isProtoTypeOf的第一条规则是“如果 Type(V) 不是 Object,则返回 false”(其中 V 是传递给方法的值)。

暂无
暂无

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

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