如何防止对原型的更改



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

如何防止对原型的更改?

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

如何防止对原型的更改?

我想你说的不是改变原型对象本身,而是覆盖现有对象的原型。

您可以使用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(),这将进一步限制对对象的修改。

可以,使用Object.freeze。

object .freeze()方法冻结对象:也就是说,阻止新的属性被添加到对象中;防止现有属性被删除;并防止更改现有属性或其可枚举性、可配置性或可写性。从本质上讲,对象实际上是不可变的。方法返回被冻结的对象。

查看此冻结参考

检查这个片段

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

希望能有所帮助

相关内容

  • 没有找到相关文章

最新更新