Object.defineProperty() (一次添加/修改一個屬性)
用法:Object.defineProperty(obj, prop, descriptor)
方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 並返回這個對象。
var obj={name:"Jane"} Object.defineProperty(obj,'age',{ value:"16", writable:true, //可重寫 enumerable:true, //可枚舉 configurable:true //可刪除該屬性(用到delete) }) //writable:true的時候,obj.age重寫能夠成功 obj.age=19 for(var i in obj){ console.log(i) } console.log(Object.keys(obj)) //返回一個全部元素爲字符串的數組,其元素來自於從給定的object上面可直接枚舉的屬性 delete obj.age //configurable:true console.log(obj) //當使用存儲性描述的時候,不能用的value和writable //若是不設置方法,則get和set的默認值是undefined var obj={name:"Jane"} var initVal = 16 Object.defineProperty(obj,'age',{ get:function(){ return initVal }, set:function(newVal){ initVal = newVal }, enumerable:true, //可枚舉 configurable:true //可刪除該屬性(用到delete) }) //獲取值 console.log(obj.age) //16 //設置值 obj.age=20; console.log(obj.age) //20
var obj={name:'Jane'}
//Object.getOwnPropertyDescriptor方法,可查看屬性特性的值 var aa = Object.getOwnPropertyDescriptor(obj,'name') console.log(aa)//{value: "Jane", writable: true, enumerable: true, configurable: true}
經過對象字面量定義的屬性,它的數據屬性:writable,enumerable,configurable默認爲true
而經過Object.defineProperty定義的屬性,它的數據屬性:writable,enumerable,configurable默認爲false數組
Object.defineProperties() (一次能夠添加/修改一個或多個屬性)
Object.defineProperties(object, descriptors)
將一個或多個屬性添加到對象,並/或修改現有屬性的特性。
var obj = {name:'Jack'};
Object.defineProperties(obj, { age:{ //這塊同上面的例子,只不過屬性名放在了下面 value:18 } })
一次添加多個屬性spa
var obj = Object.defineProperties({}, { age:{ value:18 }, name:{ value:'Jack' }, gender:{ value:'male' } })
Object.setPrototypeOf()方法設置一個指定的對象的原型(即,內部[[Prototype]]屬性)到另外一個對象或null;prototype
語法:Object.setPrototypeOf(obj,prototype);code
obj:要設置其原型的對象對象
prototype:該對象的新原型(一個對象或者null,若是參數不是一個對象或者null(例如,數字,字符串,boolean,或者undefined),則什麼都不作blog
Object.preventExtensions()
方法讓一個對象變的不可擴展,也就是永遠不能再添加新的屬性。ip
語法:Object.preventExtensions(obj)字符串
參數:obj 將要變得不可擴展的對象;返回值;已經不可擴展的對象;get
若是一個對象能夠添加新的屬性,則這個對象是可擴展的。Object.preventExtensions()將對象標記爲再也不可擴展,所以原型
它將永遠不會具備超出它標記爲不可擴展的屬性。注意,通常來講,不可擴展對象的屬性可能仍然可被刪除。嘗試將新屬性添加到不可擴展對象將靜默失敗或拋出異常TypeError(最多見但不排除其餘狀況,如在strict mode中)
Object.preventExtensions()僅阻止添加自身的屬性。但屬性仍然能夠添加到對象原型中。
一旦使其不可擴展,就沒法再對對象進行擴展。
Object.hasOwnProperty()方法會返回一個布爾值,指示對象自身屬性中是否具備指定的屬性,不包括該原型中的屬性。