![](/img/trans.png)
[英]Why o.prototype.isPrototypeof is not a function, my javascript throws an exception
[英]isPrototypeOf() function on primitive
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.