JS - 对象(4)

属性标签

属性级的权限设置

查看对象上的属性标签

Object.getOwnPropertyDescriptor({
    pro: true
}, 'pro');
// 可写,修改; 可枚举; 可删除
// Object {value: true, writable: true, enumerable: true, configurable: true}
Object.getOwnPropertyDescriptor({
    pro: true
}, 'a'); // undefined

var person = {};
Object.defineProperty(person, 'name', {
    configurable: false,
    writable: false,
    enumerable: true,
    value: 'sunorry'
});

person.name; // sunorry
person.name = 1;
person.name; //still sunorry
delete person.name; //false

Object.defineProperty(person, 'type', {
    configurable: true,
    writable: true,
    enumerable: false,
    value: 'Object'
});

// 返回对象的key
Object.keys(person); // ['name'], type不可枚举

实际一点的例子

//默认 false
Object.defineProperties(person, {
    title: {value: 'fe', enumerable: true},
    corp: {value: 'Qunar', enumerable: true},
    salary: {value: 1000, enumerable: true, writable: true}
});

Object.getOwnPropertyDescriptor(person, 'salary');
// Object {value, 1000, writeable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(person, 'corp');
// Object {value, 'Qunar', writeable: false, enumerable: true, configurable: false}

复杂点


Object.defineProperties(person, {
    title: {value: 'fe', enumerable: true},
    corp: {value: 'Qunar', enumerable: true},
    salary: {value: 1000, enumerable: true, writable: true},
    luck: {
        get: function () {
            return Math.random() > 0.5 ? 'good' : 'bad';
        }
    },
    promote: {
        set: function(level) {
            this.salary *= 1 + level * 0.1
        }
    }
});

Object.getOwnPropertyDescriptor(person, 'salary');
// Object {value, 1000, writeable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(person, 'corp');
// Object {value, 'Qunar', writeable: false, enumerable: true, configurable: false}

person.salary; // 1000
person.promote = 2;
person.salary; // 1200
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,087评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,242评论 6 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,932评论 25 709
  • 心若在,梦就在 以梦为马,不负韶华;以马为梦,奔跑趁年华! 心若在,梦就在!梦开始的时候总是猝不及防,这颗种子种下...
    青青若若阅读 526评论 1 2
  • 农历除夕即将过去,新的一年已近在指尖。回想我在2016年经历了什么。我想留下点记号。 毕业了, 离别了 从火灾现...
    亭君_阅读 163评论 0 0