let obj = { a: 1 }
1、Object.defineProperty
Object.defineProperty(obj, "a", {
configurable: false,
writable: false,
enumerable: true
})
2、new Proxy
let newObj = new Proxy(obj, {
set(obj, property, value) {
return false
},
deleteProperty(obj, property) {
return false
},
defineProperty(obj, property, descriptor) {
return false
}
})
3、Object.seal() + Object.defineProperty
Object.defineProperty(obj, "a", {
writable: false
})
4 、Object.freeze()
Object.freeze(obj)
Object.isFrozen(obj)
5、Object.preventExtensions() 阻止对象添加新的属性
Object.preventExtensions(obj);
Object.isExtensible(obj)
以上方法不能阻止通过原型操作属性
var proto = Object.getPrototypeOf(obj)
proto.a = 666
obj.a
Object.preventExtensions(proto)
总结:以上针对简单属性、对于多属性、对象属性就需要进一步处理,循环递归处理。