Pri*_*jit 7 javascript inheritance prototype prototype-chain
请考虑以下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
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释对象即使在设置为null 后如何b访问"foo"属性?用于访问属性的内部链接是什么?ab.__proto__a
我试图通过SO搜索可能的解释,但找不到任何解释Javascript的这种特殊行为.
您的问题是您正在使用不推荐使用的 __proto__属性,它是一个getter/setter on Object.prototype- 但是您的对象不会继承该对象,所以它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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |