Object.defineProperty
Object.defineProperty 是 ES5 出的语法,可以直接在一个对象上定义一个新属性,或者修改一个现有属性,并返回这个对象 如何使用 描述符 案例
Object.defineProperty 是 ES5 出的语法,可以直接在一个对象上定义一个新属性,或者修改一个现有属性,并返回这个对象
如何使用
// obj: (必需, Object) 目标对象
// prop: (必需, String) 即将定义(或修改)的属性的名称
// descriptor: (必需, Object) 即将被定义(或修改)的属性的描述符
Object.defineProperty(obj, prop, descriptor);
描述符
let Product = {};
Object.defineProperty(Product, 'discount', {
// 属性描述符descriptor
configurable: true | false, //是否可以删除目标属性或是否可以再次修改属性的特性,目标属性是否可以使用delete删除,目标属性是否可以再次设置特性
enumerable: true | false, //此属性是否可以被枚举(使用for...in或Object.keys())
value: '任意类型的值', //默认为undefined
writable: true | false //属性的值是否可以被重写,不能重写就是对象修饰符类似于const
});
// 当使用了getter或setter方法,不允许使用writable和value这两个属性
var obj = {};
Object.defineProperty(obj,"newKey",{
get:function (){} | undefined, //获得属性值的方法
set:function (value){} | undefined //设置属性值的方法
configurable: true | false //是否可以删除目标属性或是否可以再次修改属性的特性,目标属性是否可以使用delete删除,目标属性是否可以再次设置特性
enumerable: true | false //此属性是否可以被枚举(使用for...in或Object.keys())
});
案例
let Product = {};
Object.defineProperty(Product, 'discount', {
configurable: true,
enumerable: true,
value: '任意类型的值',
writable: true
});
console.log(Product);
var obj = {};
var initValue = 'hello';
Object.defineProperty(obj, 'newKey', {
get: function() {
//当获取值的时候触发的函数
return initValue;
},
set: function(newValue) {
//当设置值的时候触发的函数,设置的新值通过参数value拿到
initValue = newValue;
return;
}
});
//获取值
console.log(obj.newKey); //hello
//设置值
obj.newKey = 'change value';
console.log(obj.newKey); //change value
即可发布评论!
暂无评论
确认评论邮箱
邀请制评论