我正在Chrome控制台中使用Prototype。因为[1,2,3].prototype === Array.prototype
包含相同的方法,所以它们不等于同一原型吗?
答案 0 :(得分:4)
非类对象没有prototype
属性。相反,他们有__proto__
。如此有效:
[1,2,3].__proto__ == Array.prototype
//=> true
但已弃用。如果确实需要显式检查原型,则可以在现代JS引擎中使用它:
Object.getPrototypeOf([1,2,3]) == Array.prototype
但是,通常,检查对象是否为类实例的方法是使用instanceof
:
[1,2,3] instanceof Array
//=> true
答案 1 :(得分:3)
较旧的javascript引擎(目前是最新的,但已被淘汰)
[1,2,3].__proto__ === Array.prototype
现代javascript引擎(即非IE)
Object.getPrototypeOf([1,2,3]) === Array.prototype
答案 2 :(得分:1)
添加一些值得关注的要点,__proto__
是一个内部属性,不鼓励使用,并且仅需要根据语言规范在浏览器环境中实现,Object.getPrototypeOf()
更好。 / p>
您也可以通过isPrototypeOf
来做到这一点:
Array.prototype.isPrototypeOf([1,2,3])