我正在Chrome控制台中玩Prototype。[1,2,3].prototype === Array.prototype
不是等同于同一个原型吗?因为它们都包含相同的方法?
非类对象没有prototype
属性。相反,他们有__proto__
。所以这是有效的:
[1,2,3].__proto__ == Array.prototype
//=> true
但它已被弃用。如果你真的需要明确地检查原型,你可以在现代JS引擎中使用这个:
Object.getPrototypeOf([1,2,3]) == Array.prototype
然而,通常情况下,检查对象是否是类的实例的方法是使用instanceof
:
[1,2,3] instanceof Array
//=> true
较旧的javascript引擎(也是当前的,但被认为已弃用(
[1,2,3].__proto__ === Array.prototype
现代javascript引擎(即非IE(
Object.getPrototypeOf([1,2,3]) === Array.prototype
添加一些值得注意的额外点,__proto__
是不鼓励使用的内部属性,只需要根据语言规范在浏览器环境中实现,Object.getPrototypeOf()
更好。
你也可以通过isPrototypeOf
:
Array.prototype.isPrototypeOf([1,2,3])