js实现对象不可更改

变量可以使用const,来使变量不更改。但是const对于对象来说仅仅是保持着对象名和值之间链接保持不变。是可以改变对象的属性值的。

但是对象的属性如何确保不更改呢。

js中有一个函数Object.freeze()可以确保对象的属性不变化,但是如果对象内的属性还是对象呢,就望尘莫及了。这时候需要深拷贝的帮助了

	function deepFreeze(obj) {
    
    
    var propNames = Object.getOwnPropertyNames(obj);
    propNames.forEach(function(name) {
    
    
        var prop = obj[name];
        if (typeof prop == 'object' && prop !== null) {
    
    
            deepFreeze(prop);
        }
    });
    return Object.freeze(obj);
}

又在想Object.freeze()是如何实现的呢?

我想应该是Object.property(obj, key, {})来进行设置writable:false来设置不可更改的。然后扩展一下Object.seal(obj)可以使对象无法扩展。

猜你喜欢

转载自blog.csdn.net/qq_42535651/article/details/104379106