Object.defineProperty()方法会在对象上修改属性或者定义一个新属性 格式如下:
var obj = {};
var objDef = {
configurable:true,//true表示该属性可删除,默认值是false,
enumerable:true,//true表示该属性可枚举,默认值是false
value:'key1',//赋值给'newKey'的值,默认值是undefined
writable:true,//true表示该属性可修改,默认值是false
//get,set在下面另外介绍
};
Object.defineProperty(obj,'newKey',objDef);
console.log(obj.newKey);//key1
复制代码
注意:当使用了getter或setter方法,不允许使用writable和value这两个属性
var obj = {};
var initName = 'tangj'
Object.defineProperty(obj,'name',{
get:function(val){
return initName
},//获取属性时触发该函数
set:function(val){
initName = val
},//给该属性赋值时触发该函数
})
console.log(obj.name)
obj.name = 'change value';
console.log(obj.name)
复制代码
使用 js 实现一个只读的属性
var obj = {};
var initName;
Object.defineProperty(obj,'name',{
set:function(val){
console.log(`name is readonly.`, this)
},//给该属性赋值时触发该函数
})
console.log(obj.name);//undefined
obj.name = 'change value';
console.log(obj.name);//undefined
复制代码