课堂提问:为什么要在Object上使用defineProperty()封装功能?

课堂提问:为什么要在Object上使用defineProperty()封装功能?

这是我自己根据老师的思路封装的 常量声明函数;还请老师看看

var person={age:28};
defineConst(person);
person.name="jk";
person.age=44;
console.log(person);
// 上面的是检测代码

function defineConst(obj){
    for(var item in obj){
        if(obj.hasOwnProperty(item)){
            Object.defineProperty(obj,item,{
            writable:false
            })
        };
    };
    Object.seal(obj);
    return;
}

效果都是一样的,这两者有何区别不一样,老师为什么要在Object上定义一个函数方法,而不是直接写一个函数方法?是方便全局调用吗?

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

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

2回答
慕课网的粉 2019-08-13 10:39:48

兄弟你理解的是对的,你的强化版本写的很好,666。其实没啥区别,defineProperty就是直接定义在obj上面的,可直接在对象上面定义属性。


  • 提问者 独孤韧 #1
    我是只能,这样理解,写在Object对象上,是方便其他需要的地方调用。又因为遍历对象的做法,会将对象所有属性设为不可写,所以我感觉这样子不太好,我就想能让什么属性不可写,直接传个参数就好了。嘿嘿
    2019-08-13 15:00:08
提问者 独孤韧 2019-08-12 23:47:17
function defineConst(obj){    if(arguments.length===1){
    // 如果参数只有1个,将对象的所有属性设为常量    for(var item in obj){        if(obj.hasOwnProperty(item)){
            Object.defineProperty(obj,item,{
            writable:false
            })
        };
    };
    
    }else if(arguments.length>1){
    // 如果参数有2个或者以上,将传入的属性设为常量  
   for(var index = 1;index<arguments.length;index++){        if(obj.hasOwnProperty(arguments[index])){
            Object.defineProperty(obj,arguments[index],{
            writable:false
            })
        };
   }
    };
    
    // 不阻止window对象扩展    if(obj!=window){
         Object.seal(obj);
    };    return;
}

这是我强化更新版本

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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