考虑以下 javascript 代码
var a = Object.create(null);
a.foo = 1;
var b = Object.create(a);
console.log(b.foo); //prints 1
console.log(b.__proto__); //prints undefined
b.__proto__ = null;
console.log(b.__proto__); //prints null
console.log(b.foo); //prints 1
即使在将 b.__proto__
设置为 null 之后,谁能解释对象 b
如何访问 a
的“foo”属性?用于访问a
属性的内部链接是什么?
我尝试在 SO 中搜索可能的解释,但找不到任何关于 Javascript 的这种特殊行为的解释。
最佳答案
您的问题是您使用的是 deprecated __proto__
property ,它是 Object.prototype
上的 getter/setter - 但您的对象不会继承自它,所以它首先是 undefined
并且赋值创建一个标准属性名称 __proto__
。
使用正确的 Object.getPrototypeOf
/Object.setPrototypeOf
相反,代码将执行您期望的操作:
var a = Object.create(null);
a.foo = 1;
var b = Object.create(a);
console.log(b.foo); // 1
console.log(Object.getPrototypeOf(b)); // {foo:1} - a
Object.setPrototypeOf(b, null);
console.log(Object.getPrototypeOf(b)); // null
console.log(b.foo); // undefined
关于javascript - 使用 Object.create(null) 创建对象时 __proto__ 如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45072853/