是否存在不具备__proto__属性的JavaScript对象?
是否存在不具备__proto__属性的JavaScript对象?
答案是存在,最典型的场景如下:
- 通过
Object.create(null)创建的对象
该方法生成的对象内部[[Prototype]]插槽直接指向null,不会继承Object.prototype上的任何属性和方法。而__proto__本质是定义在Object.prototype上的访问器属性,因此这类对象自然不存在该属性。
可以运行以下代码验证:const nullProtoObj = Object.create(null); console.log(nullProtoObj.__proto__); // 输出 undefined console.log(Object.getPrototypeOf(nullProtoObj)); // 输出 null - 部分特殊宿主对象
部分JS运行环境(比如旧版浏览器、嵌入式JS引擎)中的少数宿主对象(由运行环境提供、不是JS引擎原生实现的对象),也可能没有实现__proto__属性。
注意:
__proto__是ECMAScript规范中定义的遗留兼容属性,并不推荐在生产代码中使用。如果需要读取或修改对象的原型,建议使用标准的Object.getPrototypeOf()和Object.setPrototypeOf()方法。
内容的提问来源于stack exchange,提问作者andrew yin
相关产品推荐
相关产品推荐

