如何防止更改原型?
How to prevent changes to a prototype?
在此代码中,原型仍然可以更改。
如何防止对原型进行更改?
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
How I can prevent changes to the prototype?
我假设您不是在谈论改变原型对象本身,而是覆盖现有对象的原型。
您可以使用 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()
or Object.seal()
,这会进一步限制对对象的修改。
虽然没有其他方法。
是的,我们可以,使用 Object.freeze。
Object.freeze() 方法冻结对象:即阻止向其添加新属性;防止删除现有属性;并防止更改现有属性或其可枚举性、可配置性或可写性。本质上,对象实际上是不可变的。方法returns被冻结的对象
看到这个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
希望对您有所帮助
在此代码中,原型仍然可以更改。
如何防止对原型进行更改?
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
How I can prevent changes to the prototype?
我假设您不是在谈论改变原型对象本身,而是覆盖现有对象的原型。
您可以使用 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()
or Object.seal()
,这会进一步限制对对象的修改。
虽然没有其他方法。
是的,我们可以,使用 Object.freeze。
Object.freeze() 方法冻结对象:即阻止向其添加新属性;防止删除现有属性;并防止更改现有属性或其可枚举性、可配置性或可写性。本质上,对象实际上是不可变的。方法returns被冻结的对象
看到这个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
希望对您有所帮助