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=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()方法會返回一個布爾值,指示對象自身屬性中是否具備指定的屬性,不包括該原型中的屬性。

相關文章
相關標籤/搜索