Object.defineProperty方法
?
Object.defineProperty() (一次添加/修改一個(gè)屬性) 用法:Object.defineProperty(obj, prop, descriptor)方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性, 并返回這個(gè)對(duì)象。 var obj={name:"Jane"}Object.defineProperty(obj,'age',{value:"16",writable:true, //可重寫(xiě)enumerable:true, //可枚舉configurable:true //可刪除該屬性(用到delete) })//writable:true的時(shí)候,obj.age重寫(xiě)可以成功obj.age=19for(var i in obj){console.log(i) }console.log(Object.keys(obj)) //返回一個(gè)所有元素為字符串的數(shù)組,其元素來(lái)自于從給定的object上面可直接枚舉的屬性delete obj.age //configurable:true console.log(obj)//當(dāng)使用存儲(chǔ)性描述的時(shí)候,不能用的value和writable//如果不設(shè)置方法,則get和set的默認(rèn)值是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//設(shè)置值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}
通過(guò)對(duì)象字面量定義的屬性,它的數(shù)據(jù)屬性:writable,enumerable,configurable默認(rèn)為true
?而通過(guò)Object.defineProperty定義的屬性,它的數(shù)據(jù)屬性:writable,enumerable,configurable默認(rèn)為false
?
Object.defineProperties() (一次可以添加/修改一個(gè)或多個(gè)屬性) Object.defineProperties(object, descriptors) 將一個(gè)或多個(gè)屬性添加到對(duì)象,并/或修改現(xiàn)有屬性的特性。 var obj = {name:'Jack'};Object.defineProperties(obj, {age:{ //這塊同上面的例子,只不過(guò)屬性名放在了下面value:18 } })
?
一次添加多個(gè)屬性
var obj = Object.defineProperties({}, {age:{value:18},name:{value:'Jack'},gender:{value:'male'}})?
Object.setPrototypeOf()方法設(shè)置一個(gè)指定的對(duì)象的原型(即,內(nèi)部[[Prototype]]屬性)到另一個(gè)對(duì)象或null;
語(yǔ)法:Object.setPrototypeOf(obj,prototype);
obj:要設(shè)置其原型的對(duì)象
prototype:該對(duì)象的新原型(一個(gè)對(duì)象或者null,如果參數(shù)不是一個(gè)對(duì)象或者null(例如,數(shù)字,字符串,boolean,或者undefined),則什么都不做
?
Object.preventExtensions()方法讓一個(gè)對(duì)象變的不可擴(kuò)展,也就是永遠(yuǎn)不能再添加新的屬性。
語(yǔ)法:Object.preventExtensions(obj)
參數(shù):obj 將要變得不可擴(kuò)展的對(duì)象;返回值;已經(jīng)不可擴(kuò)展的對(duì)象;
如果一個(gè)對(duì)象可以添加新的屬性,則這個(gè)對(duì)象是可擴(kuò)展的。Object.preventExtensions()將對(duì)象標(biāo)記為不再可擴(kuò)展,因此
它將永遠(yuǎn)不會(huì)具有超出它標(biāo)記為不可擴(kuò)展的屬性。注意,一般來(lái)說(shuō),不可擴(kuò)展對(duì)象的屬性可能仍然可被刪除。嘗試將新屬性添加到不可擴(kuò)展對(duì)象將靜默失敗或拋出異常TypeError(最常見(jiàn)但不排除其他情況,如在strict mode中)
Object.preventExtensions()僅阻止添加自身的屬性。但屬性仍然可以添加到對(duì)象原型中。
一旦使其不可擴(kuò)展,就無(wú)法再對(duì)對(duì)象進(jìn)行擴(kuò)展。
?
Object.hasOwnProperty()方法會(huì)返回一個(gè)布爾值,指示對(duì)象自身屬性中是否具有指定的屬性,不包括該原型中的屬性。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xumqfaith/p/8662456.html
總結(jié)
以上是生活随笔為你收集整理的Object.defineProperty方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2018年各大互联网前端面试题三(阿里)
- 下一篇: javascript 面向对象编程(工厂