码迷,mamicode.com
首页 > 其他好文 > 详细

自己封装一个Object.freeze()方法

时间:2020-01-29 18:21:16      阅读:110      评论:0      收藏:0      [点我收藏+]

标签: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);
            

 

自己封装一个Object.freeze()方法

标签:fine   span   define   func   pre   false   使用   obj   sea   

原文地址:https://www.cnblogs.com/rickdiculous/p/12240764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!