ES5规范开始后续版本的迭代,也在致力于做一件事,就是把js底层已有的功能,提供给开发者使用。Object.defineProperty就是其中一个,此方法会可直接在一个对象上定义一个新的具有详细描述的属性,或者修改一个对象的现有属性,并返回这个对象。
// Object.defineProperty(对象,属性,描述符)
// 描述符对 对象的属性进行详细的描述:
// 数据描述符:
// value:'xxx' 属性值 默认''
// writable:true 是否可写 默认false
// configurable:true 是否可配置 默认false
// enumerable:true 是否可枚举 默认false
// 存取描述符:
// get:function(){}属性访问器,进行写操作时调用该方法
// set:function(){}属性访问器,进行读操作时调用该方法
var obj = {
}
Object.defineProperty(obj, 'name', {
value: 'aaa',
writable: false ,
configurable: true ,
enumerable: true
});
obj.name = 10
console.log(obj.name) //aaa
for(var prop in obj){
console.log(prop) //name
}
delete obj.name
console.log(obj.name) //undefined
value,writable和get,set方法同时存在时会出现异常,不能同时使用,
var obj = {
}
var tempVale = 'aaa'
Object.defineProperty(obj, 'name', {
//这两个属性不能喝get,set共存
// value: 'aaa',
// writable: false ,
configurable: true,
enumerable: true,
get: function () {
return tempVale
},
set: function (newValue) {
tempVale = newValue
},
});
//走get方法,返回值为aaa
console.log(obj.name)//aaa
//走set方法,复制
obj.name = 10
//走get方法,返回值为10
console.log(obj.name)//10
get和set是双向数据绑定的核心方法,主要做数据劫持(监控属性变化),同时也是ES6中很多语法糖底层实现的核心方法
来源:CSDN
作者:风间琉璃丷
链接:https://blog.csdn.net/qq_37167086/article/details/103904843