溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Vue中的Object.defineProperty怎么用

發(fā)布時(shí)間:2022-05-05 13:38:56 來(lái)源:億速云 閱讀:220 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“Vue中的Object.defineProperty怎么用”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Vue中的Object.defineProperty怎么用”文章吧。

Object.defineProperty理解

定義:Object.defineProperty() 方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性,并返回此對(duì)象。

一、直接添加

let person = {
    name:'張三',
    sex:'男',
}
Object.defineProperty(person,'age',{
    value:18,
    enumerable:true,//控制屬性是否可以枚舉,默認(rèn)值是false,當(dāng)該屬性的值為 true 時(shí),該屬性才會(huì)出現(xiàn)在對(duì)象的枚舉屬性中。
    writable:true,//控制屬性是否可以被修改,默認(rèn)值是false,當(dāng)該屬性的值為 true 時(shí),才能被賦值運(yùn)算符改變。
    configurable:true,//控制屬性是否可以被刪除,默認(rèn)值是false,當(dāng)該屬性的值為 true 時(shí),該屬性能從對(duì)應(yīng)的對(duì)象上被刪除。  
             
})
console.log(person);

二、使用getter、setter 

let age_number = 18;
let person = {
    name:'張三',
    sex:'男',
}
Object.defineProperty(person,'age',{
    //value:18,
    //enumerable:true,//控制屬性是否可以枚舉,默認(rèn)值是false,當(dāng)該屬性的值為 true 時(shí),該屬性才會(huì)出現(xiàn)在對(duì)象的枚舉屬性中。
    //writable:true,//控制屬性是否可以被修改,默認(rèn)值是false,當(dāng)該屬性的值為 true 時(shí),才能被賦值運(yùn)算符改變。
    //configurable:true,//控制屬性是否可以被刪除,默認(rèn)值是false,當(dāng)該屬性的值為 true 時(shí),該屬性能從對(duì)應(yīng)的對(duì)象上被刪除。  
    get(){
        console.log("讀取age屬性");
        return age_number;
    },
    set(value)
    {
        console.log("修改age的值");
        age_number = value;
    }              
})
console.log(person);

需要Object.defineProperty()注意點(diǎn)

1.用Object.defineProperty方法創(chuàng)建一個(gè)新屬性時(shí),如果不指定configurabel,enumberable,writable特性的默認(rèn)值都是false,修改已定義的屬性特性無(wú)限制。

2.Configurable性定義為不可配置就不能把它變回可配置,此時(shí)調(diào)用Object.defineProperty修改除writable之外的特性都會(huì)報(bào)錯(cuò)。

3.模擬訪問(wèn)和設(shè)置的行為:想要訪問(wèn)器屬性模擬默認(rèn)行為的話,必須的在里面新添一個(gè)屬性不然會(huì)造成循環(huán)引用

var obj={
a:1
};
 
Object.defineProperty(obj,"a",{
get:function(){
return this.a;
},
 
set:function(val){
this.a=val
}
});
obj.a;// Maximum call stack size exceeded

會(huì)造成循環(huán)引用,狂call不止

person.a → get.call(person) → this.a → person.a  → get.call(person) → this.a......

以上就是關(guān)于“Vue中的Object.defineProperty怎么用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI