Object.defineProperty方法
?
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=19for(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的默認值是undefinedvar obj={name:"Jane"}var initVal = 16Object.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 } })
?
一次添加多個屬性
var obj = Object.defineProperties({}, {age:{value:18},name:{value:'Jack'},gender:{value:'male'}})?
Object.setPrototypeOf()方法設置一個指定的對象的原型(即,內部[[Prototype]]屬性)到另一個對象或null;
語法:Object.setPrototypeOf(obj,prototype);
obj:要設置其原型的對象
prototype:該對象的新原型(一個對象或者null,如果參數不是一個對象或者null(例如,數字,字符串,boolean,或者undefined),則什么都不做
?
Object.preventExtensions()方法讓一個對象變的不可擴展,也就是永遠不能再添加新的屬性。
語法:Object.preventExtensions(obj)
參數:obj 將要變得不可擴展的對象;返回值;已經不可擴展的對象;
如果一個對象可以添加新的屬性,則這個對象是可擴展的。Object.preventExtensions()將對象標記為不再可擴展,因此
它將永遠不會具有超出它標記為不可擴展的屬性。注意,一般來說,不可擴展對象的屬性可能仍然可被刪除。嘗試將新屬性添加到不可擴展對象將靜默失敗或拋出異常TypeError(最常見但不排除其他情況,如在strict mode中)
Object.preventExtensions()僅阻止添加自身的屬性。但屬性仍然可以添加到對象原型中。
一旦使其不可擴展,就無法再對對象進行擴展。
?
Object.hasOwnProperty()方法會返回一個布爾值,指示對象自身屬性中是否具有指定的屬性,不包括該原型中的屬性。
?
轉載于:https://www.cnblogs.com/xumqfaith/p/8662456.html
總結
以上是生活随笔為你收集整理的Object.defineProperty方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018年各大互联网前端面试题三(阿里)
- 下一篇: javascript 面向对象编程(工厂