__proto__和[[Prototype]]的区别

__proto__和[[Prototype]]的区别

先看下面这一段代码:

const obj1 = Object.create(null); // very plain object
obj1.__proto__ = Array.prototype;
console.log(obj1.slice) // undefined

console.log(obj1.slice) // undefined 这一行难道不应该是打印出slice函数吗?毕竟重新定义了obj1的原型对象,那么按照原型链的规则,应该会向上查询到slice方法的。但为什么没有呢?

那是因为
Object原型上的__proto__的set才有改变[[Prototype]]的功能,然而Object.create(null)的对象设置的__proto__只是一个普通的属性,没有改变[[Prototype]]

这恰恰说明了__proto__不是一个对象的属性,只是 Object.prototype 的访问器属性:


posted @ 2022-04-13 17:52  azoux  阅读(154)  评论(0编辑  收藏  举报