var a= {} Object.defineProperty(a,"b",{ value:123 }) console.log(a.b);//123
Object.defineProperty有三個參數
一個參數:目標對象編碼
第二個參數:須要定義的屬性或方法的名字。spa
第三個參數:目標屬性所擁有的特性。(descriptor)code
他又如下取值,對象
value:屬性的值ip
writable:若是爲false,屬性的值就不能被重寫,只能爲只讀了get
configurable:總開關,一旦爲false,就不能再設置他的(value,writable,configurable)string
enumerable:是否能在for...in循環中遍歷出來或在Object.keys中列舉出來。it
get:獲取值io
set:設置值console
當咱們只設置了 value,別的並無設置,可是 第一次的時候能夠簡單的理解爲(暫時這樣理解)它會默認幫咱們把writable,configurable,enumerable。都設上值,並且值還都是false,下面你再想設置,就會報錯
想用(get 和 set),就不能用(wriable 或 value中的任何一個)
var a= {} Object.defineProperty(a,"b",{ set:function(newValue){ console.log("你要賦值給我,個人新值是"+newValue) }, get:function(){ console.log("你取個人值") return 2 //注意這裏,我硬編碼返回2 } }) a.b =1 //打印 你要賦值給我,個人新值是1 console.log(a.b) //打印 你取個人值 //打印 2 注意這裏,和個人硬編碼相同的