如何防止改变原型?

时间:2016-11-08 13:21:03

标签: javascript object-create

在此代码中,原型仍然可以更改。

如何阻止原型的更改?

var a = {a:1}
var b={b:1}
var c = Object.create(a)
Object.getPrototypeOf(c) //a
c.__proto__ = b;
Object.getPrototypeOf(c) //b
var d = Object.create(null)
Object.getPrototypeOf(d) //null
d.__proto__ = b;
Object.getPrototypeOf(d) //null

2 个答案:

答案 0 :(得分:5)

  

如何阻止原型的更改?

我假设你不是在谈论改变原型对象本身,而是覆盖现有对象的原型。

您可以使用Object.preventExtensions()来阻止:



var a = {a:1}
var b = {b:1}
var c = Object.create(a)
Object.preventExtensions(c) 
console.log(Object.getPrototypeOf(c)) //a
c.__proto__ = b; // Error




但这也意味着您无法添加任何新属性。您还可以根据需要使用Object.freeze()Object.seal(),这样可以进一步限制对对象的修改。

没有别的办法。

答案 1 :(得分:0)

是的,我们可以,使用Object.freeze。

Object.freeze()方法冻结一个对象:即阻止向其添加新属性;防止删除现有属性;并防止现有属性或其可枚举性,可配置性或可写性被更改。实质上,该对象实际上是不可变的。该方法返回被冻结的对象。

请参阅此freeze reference

检查此代码段

var a = {a:1}
var b={b:1}
var c = Object.create(a)
Object.getPrototypeOf(c) //a
Object.freeze(c);
c.__proto__ = b;//throws error now
console.log(Object.getPrototypeOf(c)) //a
var d = Object.create(null)
Object.getPrototypeOf(d) //null
d.__proto__ = b;
Object.getPrototypeOf(d) //null

希望这有帮助