标签:fine span define func pre false 使用 obj sea
1、遍历所有属性和方法
2、修改遍历到的属性的描述
3、Object.seal()
Object.defineProperty(Object,‘freezePolyfill‘,{ value:function(obj){ var i; //遍历属性和方法 for(i in obj){ if(obj.hasOwnProperty(i)){ Object.defineProperty(obj,i,{ //修改遍历到的属性 writable:false }); } } Object.seal(obj); } });
如果对象的其中一个属性又是对象,那么这个对象中的对象里的属性是可以被修改的。可以使用递归判断外层对象的属性是否为对象,再重新使用freezePolyfill()方法去套。(不使用递归而使用迭代的方式也可以):
Object.defineProperty(Object,‘freezePolyfill‘,{ value:function(obj){ var i; for(i in obj){ if(obj.hasOwnProperty(i)){ //判断属性是否为对象 if(typeof(obj[i]) === ‘object‘){ //迭代freezePolyfill方法 Object.freezePolyfill(obj[i]); }else{ Object.defineProperty(obj,i,{ writable:false }); } } } Object.seal(obj); } });
应用:
const xiaoming = { age:14, name:‘小明‘, obj:{ a:1 } }; Object.freezePolyfill(xiaoming);
标签:fine span define func pre false 使用 obj sea
原文地址:https://www.cnblogs.com/rickdiculous/p/12240764.html