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);//undefinedobj.name = 'change value';console.log(obj.name);//undefined复制代码