defineProperty

兼容性:ie9以上,ie8實(shí)現(xiàn)不徹底

數(shù)據(jù)屬性
Object.defineProperty(對象,'屬性',描述符對象)
var o={};
    Object.defineProperty(o,"name",{
        writable:false,    //為false時不能更改,默認(rèn)false
        configurable:false,//為false時不能delete,默認(rèn)false
        enumerable:false,  //為false時不能被遍歷,默認(rèn)false
        value:"h"
    })
    for(var i in o){
        console.log(i);//沒有執(zhí)行
    }
    o.name="x";
    console.log(o.name);//h

    delete o.name;
    console.log(o.name);//h
訪問器屬性:
Object.defineProperty(對象,'屬性',描述符對象)
var o={a:1};
    Object.defineProperty(o,"name",{
        configurable:false,//為false時不能delete,默認(rèn)true
        enumerable:false,//為false時不能被遍歷,默認(rèn)true
        get:function(){  //沒有此方法表示不能讀

            return this.a;  //執(zhí)行2(獲取值)
        },
        set:function(newValue){ //沒有此方法表示不能寫

            this.a=12;  //執(zhí)行1(設(shè)置值)
        }
    })

    o.name=2;//執(zhí)行1
    console.log(o.name);//12,//執(zhí)行2
定義多個屬性
Object.defineProperties(  object,{"屬性":{}  }  );

接收兩個對象參數(shù),第一個是要添加和修改屬性的對象,第二個對象的屬性以第一個對象中屬性一一對應(yīng)

var o={};
    Object.defineProperties(o,{
        a:{
            value:1
        },
        b:{
            value:2
        },
        c:{
            get:function(){},
            set:function(bewValue){}
        }
    })

    o.b=2;
    console.log(o.a);

注:vue基于此屬性實(shí)現(xiàn)數(shù)據(jù)綁定

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容