【发布时间】:2019-04-14 19:01:02
【问题描述】:
我可以强制不改变对象的原型吗?
注意!有一些要求:
- 对象的行为应该与常规对象字面量一样(添加/删除/配置/修改对象的属性和描述符),
- 实际上唯一的新限制是原型是永久性的。
所以除了原型是永久性的,我不想添加任何其他限制(Object.seal/freeze/preventExtensions 等工具对对象施加更多限制)。
我需要猴子补丁吗???? Object.prototype.__proto__ 和 Object.setPrototypeOf 以实现此目的?
【问题讨论】:
-
您是否真的错过了
Object.seal或者由于某种原因它不适合您?此外,Object.freeze更适合您。 -
@WiktorZychla 啊哈!我没有尝试过,但我的直觉并不认为这会起作用,因为我认为
__proto__是一个 getter/setter 意味着 setter 仍然可以接受这个值并按照它的意愿去做(就像在用户代码设置器)!谢谢!这是否意味着用户代码设置者应该检查对象是否被密封,并在这种情况下抛出?否则,为什么 Object.seal 禁用__proto__,而不禁用常规用户设置器? -
@WiktorZychla 提出了一个新问题:stackoverflow.com/questions/55679182
-
__proto__已弃用。不要再使用了。 -
@trusktr 仅指定在 web-compat 环境之间具有一致性。 It is officially specified as deprecated.
标签: javascript prototype prototype-programming prototype-chain