这样可以吗

这样可以吗

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
Object.defineProperty(Object,'freezPolyFill',{
value: function(obj){
let i;
for(i in obj){
if(obj.hasOwnProperty(i)){
if(typeof obj[i] === 'object'){
return Object.freezPolyFill(obj[i]);
}
Object.defineProperty(obj,i,{
writable:false
})
}
}
Object.seal(obj);
}
})

const xiaoming = {
age:14,
name:'xiaoming',
hobby:{
basketball:true,
football:true
}
}

Object.freezPolyFill(xiaoming);
</script>
</body>
</html>


正在回答 回答被采纳积分+1

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

4回答
好帮手慕夭夭 2018-12-24 10:47:29

@huangmin  你好同学 , 根据练习要求 , 本题能把基本的属性冻结即可 . rickleong同学的效果是实现了的 . 只是同学考虑的更全面一点 . 能够看出来同学学习的很认真细心 . 这一点很值得表扬 . 继续加油 !

祝学习愉快 !

huangmin 2018-12-22 16:04:02

前面几条回复错了喔  数组和对象都能验证通过的是下面这个。

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>Document</title>
</head>
<body>
<script type="text/javascript">
   Object.defineProperty(Object, 'freezePolyfill', {
       value: function(obj) {
           var i;
           for (i in obj) {
               if (obj.hasOwnProperty(i)) {
                   if (typeof obj[i] === 'object' && !isNaN(obj[i].length)) { //是数组的情况
                       Object.seal(obj[i]);
                       Object.defineProperty(obj, i, {
                           writable: false
                       });
                   }else if (typeof obj[i] === 'object'){  //是对象的情况

                       Object.freezePolyfill(obj[i]);
                   }else{
                       Object.defineProperty(obj, i, {
                           writable: false
                       });
                   }
               }
           }
           Object.seal(obj);
       }
   });

   const xiaoming = {
       age:14,
       name:'xiaoming',
       hobby:{
           basketball:true,
           football:true
       },
       parents:[1]
   }
   Object.freezePolyfill(xiaoming);
   xiaoming.a="15";
   xiaoming.age="age";
   xiaoming.hobby["basketball"]="bascket1";
   xiaoming.parents=[1,2];
   console.log(xiaoming);
</script>
</body>
</html>

huangmin 2018-12-22 15:48:20

上面代码有bugObject.seal(obj);需要放在for循环里面。修改如下即可。

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>Document</title>
</head>
<body>
<script type="text/javascript">
   Object.defineProperty(Object,'freezPolyFill',{
       value: function(obj){
           var i;
           for(i in obj){
               // console.log(i);
               if(obj.hasOwnProperty(i)){
                   if(typeof obj[i] === 'object'){
                       return Object.freezPolyFill(obj[i]);
                   }
                   console.log(i);
                   Object.defineProperty(obj,i,{
                       writable:false
                   })
               }
               Object.seal(obj);
           }

       }
   })

   const xiaoming = {
       age:14,
       name:'xiaoming',
       hobby:{
           basketball:true,
           football:true
       }
   }
   Object.freezPolyFill(xiaoming);
   xiaoming.a="15";
   xiaoming.hobby["basketball"]="bascket1";
   console.log(xiaoming);
</script>
</body>
</html>

好帮手慕夭夭 2018-08-15 15:57:05

效果实现了呢 ,继续加油哦 ,祝学习愉快

  • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> Object.defineProperty(Object,'freezPolyFill',{ value: function(obj){ var i; for(i in obj){ // console.log(i); if(obj.hasOwnProperty(i)){ if(typeof obj[i] === 'object'){ return Object.freezPolyFill(obj[i]); } console.log(i); Object.defineProperty(obj,i,{ writable:false }) } } Object.seal(obj); } }) const xiaoming = { age:14, name:'xiaoming', hobby:{ basketball:true, football:true } } // console.log(xiaoming); // xiaoming.a="a"; // xiaoming.hobby["basketball"]="bascket"; // console.log(xiaoming); Object.freezPolyFill(xiaoming); xiaoming.a="15"; xiaoming.hobby["basketball"]="bascket1"; console.log(xiaoming); </script> </body> </html>
    2018-12-22 15:42:09
  • 没有实现啊 验证下就知道了呢
    2018-12-22 15:42:50
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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