老师您看写的有什么不规范的么

老师您看写的有什么不规范的么

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
<script type="text/javascript">
//补充代码
    const xiaoming = {
        age: 14,
        name: '小明',
        obj: {
            a: 1
        }
    }
    
    Object.defineProperty(Object,"defineFreeze",{
        value: function(obj){
            
                var i;
                for(i in obj){
                    if(obj.hasOwnProperty(i)){
                        if(obj[i] instanceof Object){
                            Object.defineFreeze(obj[i]);
                        }else{
                            Object.defineProperty(obj,i,{
                                writable:false
                            })
                        }
                        
                    }
                }
            
            Object.seal(obj);
        }
    });
    Object.defineFreeze(xiaoming)
    </script>
</body>
</html>

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,代码实现正确,也很规范。继续加油,祝学习愉快!

好帮手慕久久 2021-09-26 17:35:27

同学们好,“weixin_慕侠5170623”的写法是有问题,因为代码并没有处理obj的属性值,所以可以通过xiaoming.obj = null的形式修改xiaoming

https://img1.sycdn.imooc.com//climg/61503e06092149f105490232.jpg

https://img1.sycdn.imooc.com//climg/61503e4909a031d508790724.jpg

“风轻云淡f”的写法是可以的,可以参考一下他的写法。

祝学习愉快!

Odyssey_2022 2021-09-26 15:40:19
// 你这样写有bug
// xiaoming.obj 还是可以修改的,如
xiaoming.obj = null 

// for in 循环里改成这样就可以了
if(obj.hasOwnProperty(i)){
  Object.defineProperty(obj, i, {
    writable: false
  })
  Object.seal(obj);
}
if(obj[i] instanceof Object){
  Object.freezePolyfill(obj[i])
}


  • // 有个小问题漏了,下面的代码得放到 if(obj.hasOwnProperty(i)){...}大括号中
    if(obj[i] instanceof Object){
      Object.freezePolyfill(obj[i])
    }


    2021-09-26 15:44:41
  • // 这样写实测是可以的
    Object.defineProperty(Object, 'freezePolyfill', {
        value: function(obj){
            for(let i in obj){
                if(obj.hasOwnProperty(i)){
                    Object.defineProperty(obj, i, {
                        writable: false
                    })
                    Object.seal(obj);
                    if(obj[i] instanceof Object){
                        Object.freezePolyfill(obj[i])
                    }
                }
            }
        }
    })
    const xiaoming = {
        name: '小明',
        weixin: 192833,
        girlFriend: {
            name: '小红',
            weixin: 177233
        }
    }
    
    
    Object.freezePolyfill(xiaoming)


    2021-09-26 15:51:45
  • // 这样写实测是可以的
    Object.defineProperty(Object, 'freezePolyfill', {
        value: function(obj){
            for(let i in obj){
                if(obj.hasOwnProperty(i)){
                    Object.defineProperty(obj, i, {
                        writable: false
                    })
                    Object.seal(obj);
                    if(obj[i] instanceof Object){
                        Object.freezePolyfill(obj[i])
                    }
                }
            }
        }
    })
    const xiaoming = {
        name: '小明',
        weixin: 192833,
        girlFriend: {
            name: '小红',
            weixin: 177233
        }
    }
    
    
    Object.freezePolyfill(xiaoming)


    2021-09-26 15:53:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师