Object.defineProperty()

  • 通常我们在对象上添加/修改属性和方法
let obj = {
      user:'xiaoming'
}
obj.detail = 'obj详情’//添加
obj.fun = function(){}
  • Object.defineProperty也可以修改/添加属性

  • Object.defineProperty(目标对象,要修改/添加的属性名,特性)

Object.defineProperty(obj, prop, descriptor)
let obj10 = {}
// obj10.num = 13
Object.defineProperty(obj10,'num',{value:13})
console.log(obj10.num)//13
  • 看上面的例子,Object.defineProperty的第三个参数:是一个{}类型,我们可以在第三个参数里面设置它的,可枚举性,是否可读等特性,下面一一例举
  1. value 设置属性值(可以是任意值)
let obj10 = {}
// obj10.num = 13
Object.defineProperty(obj10,'num',{value:13})
console.log(obj10.num)//13
Object.defineProperty(obj10,'num',{value:101})
console.log(obj10.num)//101
  1. writable:是否可写,默认false不可
let obj10 = {}
Object.defineProperty(obj10,'num',{value:13})//添加
console.log(obj10.num)//13
obj10.num=101
console.log(obj10.num)//没有修改,值还是13
Object.defineProperty(obj10,'num',{value:111})//尝试修改----报错
console.log(obj10.num)
image.png
  • 上面的例子,为什么没有出现我们想要的结果?因为Object.defineProperty第三个参数对象里有个属性writable--表示是否可写。默认是false不可写。将他改为true可写状态。
let obj10 = {}
Object.defineProperty(obj10,'num',{value:13,writable:true})//添加
console.log(obj10.num)//13
obj10.num=101
console.log(obj10.num)//101
Object.defineProperty(obj10,'num',{value:111,writable:true})
console.log(obj10.num)//111
  1. enumerable:是否可枚举,默认false不可。enumerable:false表示对象该属性不可在for…in/Object.keys()中枚举。看下面的例子,enumerable:true就可以打印出来。
var obj10={name:'xiaoming',age:10,gender:0}
Object.defineProperty(obj10,'detail',{value:'detail',writable:true,enumerable:true})
console.log(Object.keys(obj10))// ["name", "age", "gender", "detail"]

var obj10={name:'xiaoming',age:10,gender:0}
Object.defineProperty(obj10,'detail',{value:'detail',writable:true})
console.log(Object.keys(obj10))// ["name", "age", "gender"]
console.log(obj10)//{name: "xiaoming", age: 10, gender: 0, detail: "detail"}
  1. Configurable 属性:默认值false。true可以删除可以重新定义。false不可删除不可以重新定义
var obj10={name:'xiaoming',age:10,gender:0}
Object.defineProperty(obj10,'detail',{value:'detail',writable:true,enumerable:true,configurable:false})//configurable:false不可删除,不可重新定义
delete obj10.detail
console.log(obj10)//{name: "xiaoming", age: 10, gender: 0, detail: "detail"}
Object.defineProperty(obj10,'detail',{value:'detail',writable:true,enumerable:true,configurable:true})//报错
  1. 自定义getter,setter:get是获取的方法。set是设置的方法。使用getter,setter方法是不可以使用writable和value这两个属性
var temp = null
var obj = {}
Object.defineProperty(obj,'gender',{
    get:function () {
        return temp
    },
    set:function (value) {
        temp = value
    }
})
obj.gender='设置值'//set
console.log(obj.gender)//get
  • 总结:Object.defineProperty方法可以在对象上添加/修改属性,然后返回给这个对象。设置特性对象参数:
    value: 设置属性的值
    writable: 值是否可写。
    enumerable:是否可以被枚举。
    configurable: 是否可以被删除且再次修改特性
    set: 给目标属性设置值的方法
    get:获取目标属性值的方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容