1.Object.defineProperty數組
給一個對象定義一個新的屬性或者在修改一個對象現有的屬性,並返回這個對象this
語法:spa
Object.defineProperty(參數1,參數2,參數3)prototype
參數1:目標對象code
參數2:要修改或者添加的屬性名稱對象
參數3:目標對象屬性的一些特徵(是一個對象)blog
參數1:繼承
value:屬性值get
參數2:原型
writable:對象屬性值時候能夠被修改 true容許 false不容許
參數3:
configurable:對象屬性是否能夠被刪除 true容許 false不容許
參數4:
enumerable:對象屬性是否能夠被枚舉
參數5:
get():給一個屬性提供getter方法,當訪問這個對象的屬性值的時候觸發該方法
參數6:
set():給一個屬性提供setter方法,當設置屬性值的時候觸發該方法‘
2.value
var obj = {}; Object.defineProperty(obj,"name",{ value:"張三" }) Object.defineProperty(obj,"age",{ value:"28" }) console.log(obj)
3.writable
var obj = {}; Object.defineProperty(obj,"name",{ value:"張三", writable:false//當設置爲false的時候當前對象的屬性值不容許被修改 }) obj.name = "李四" console.log(obj.name)//張三 var obj = {}; Object.defineProperty(obj,"name",{ value:"張三", writable:true//當設置爲true的時候當前對象的屬性值容許被修改 }) obj.name = "李四" console.log(obj.name)//李四
4.configurable
var obj = {}; Object.defineProperty(obj,"name",{ value:"張三", configurable:false//當設置爲false的時候對象的屬性不容許被刪除 }) delete obj.name; console.log(obj.name)//張三 var obj = {}; Object.defineProperty(obj,"name",{ value:"張三", configurable:true//當設置爲true的時候對象的屬性容許被刪除 }) delete obj.name; console.log(obj.name)//undefined
5.enumerable
var obj = {name:"張三",age:"18"} Object.defineProperty(obj,"name",{ enumerable:false//當設置爲false的時候對象的屬性不可被枚舉 }) Object.defineProperty(obj,"age",{ enumerable:true//當設置爲true的時候對象的屬性可被枚舉 }) console.log(Object.keys(obj))
6.for in 與 Object.keys()的區別
function Person(name,age){ this.name=name; this.age=age; } Person.prototype = { sex:"男" } var man = new Person("張三",18); console.log(Object.keys(man));//["name","age"] for(var key in man){ console.log(key);//name age sex }
7.get()&&set()
var obj = {name:"張三"} Object.defineProperty(obj,"name",{ get(){ console.log("被訪問了")//當被訪問的時候會觸發get()方法 }, set(newVal){ console.log("被設置了"+newVal)//當被設置的時候會觸發set()方法 } }) obj.name;//輸出:被訪問了 obj.name="李四"//輸出:被設置了李四