javascript - 如果使用 Object.create(null) 创建对象,为什么 object.__proto__ 可以更改为原始对象;
问题描述
当我们使用__proto__属性创建普通对象时。属性只能是 object 或 null,如果我们想将proto更改为原始类型,这仍然是 Object.prototype。
const obj1 = {
__proto__: "test"
};
console.log(obj1.__proto__)// Still Object.prototype not change to "test"
但是如果我们通过Object.create(null)创建对象,对象的proto属性可以改变原始类型。
const obj2 = Object.create(null);
obj2.__proto__ = "test";
console.log(obj2.__proto__) // "test"
所以我知道 __proto__ 不是对象的属性,而是 Object.prototype 的访问器属性:
我的问题是我们如何手动创建像proto这样的访问器属性?
我想在Object.prototype中创建一个 getter 和 setter,并且这个 getter 和 setter 不能像proto内部属性一样被覆盖。
例如,如果我像这样声明 getter 和 setter
Object.defineProperty(Object.prototype, "lastName", {
get() {
return "Sofiyev"
},
set(v) {
},
});
lastName 属性不能像这样被覆盖。
const murad = {};
murad.lastName = 123
console.log(murad.lastName) //Sofiyev
但像这样可以覆盖。
const murad = {
lastName: "123"
};
console.log(murad.lastName) // 123
这对我来说很有趣,为什么 __proto__ 不像我的上一个示例那样可覆盖
解决方案
推荐阅读
- r - 在 R 上进行描述性统计时未使用的参数
- node.js - Stripe connect 是否支持重复付款?
- vue.js - 如何在使用条件渲染隐藏输入后重置 v-model
- javascript - 我有一个类 Component 但我得到这个 `createAnimatedComponent` 不支持无状态功能组件;改用类组件
- linux - YouCompleteMe 不可用:无法加载 Python
- multithreading - 在影响性能之前,我可以使用 8 核、16 线程处理器同时处理多少个网站脚本请求?
- python - Django 静态文件不可访问
- c# - 我根据教程制作了一个记忆游戏
- r - 被动检查文件是否可用
- sql - 如何在某些条件下合并行postgres Sql