在ECMAScript中,没有__proto__
对象:
Array.hasOwnProperty('prototype') //true
var arr = new Array()
arr.hasOwnProperty('__proto__') //false
然后,我们可以找到:
Object.getOwnPropertyDescriptors(arr)
输出:
length:{value: 1, writable: true, enumerable: false, configurable: false}
__proto__:Object
所以,我很困惑:
arr
是否有自己的属性__proto__
?
当我尝试做事时:
arr.unshift("2")
Js引擎在哪里找到unshift
方法?
是否有任何信息让Js引擎找到unshift
?
答案 0 :(得分:2)
Js引擎在哪里找到非移动方法?
在Array.prototype
上arr
继承。每个对象都有一个内部原型链链接,通常称为[[prototype]]。您可以使用Object.getPrototypeOf
访问它。
Object.getPrototypeOf(arr) == Array.prototype
所以,我很困惑:arr有自己的属性
__proto__
吗?
不,__proto__
是一个继承自Object.prototype
的setter / getter,它不是拥有属性。 (你可以找到"__proto__" in arr
)。并且it's deprecated。最好忘了它。
为什么
Object.getOwnPropertyDescriptors(arr)
输出__proto__
?
因为控制台使用此名称来表示内部原型链接。 getOwnPropertyDescriptors
返回一个自然继承自Object.prototype
的对象。没什么特别的。您也可以在空对象{}
中找到它。