解讀:Object.defineProperty

Object.defineProperty

vuejs的雙向數(shù)據(jù)綁定就是通過他實(shí)現(xiàn)的(劃重點(diǎn)!~)

vuejs中data下的屬性都添加了set和get,所以數(shù)據(jù)改變觸發(fā)set,而set會(huì)觸發(fā)視圖更新。computed計(jì)算緩存就是這個(gè)道理,當(dāng)data沒有改變,computed會(huì)將之前計(jì)算的結(jié)果返回,從而形成計(jì)算緩存。

先來個(gè)demo:

var a={};

Object.defineProperty(a,"test",{

? ? value:2017

})

console.log(a.test);//2017

參數(shù)詳解:

第一個(gè)參數(shù):目標(biāo)參數(shù)

第二個(gè)參數(shù):需要定義的屬性或者方法的名字

第三個(gè)參數(shù):目標(biāo)屬性所擁有的特性(descriptor)

其中第三個(gè)參數(shù)還有以下參數(shù)?。?/h4>

value:value值

writable:如果為false,屬性為只讀

configurable:總開關(guān),如果為false,就不能在設(shè)置(value,writable,configurable 這里劃重點(diǎn)?。?/p>

enumerable:是否在for in ?中遍歷出來

set:訪問器set

get:訪問器get

如果只設(shè)置value,相當(dāng)于:

var a={};

Object.defineProperty(a,"test",{

value:2017,

writable:false,

enumerable:false,

configurable:false

})

console.log(a.test);//2017

但是只設(shè)置value,對(duì)set和get不起作用。

set和get

如果設(shè)置了set和get,就不能設(shè)置writable和value,否則會(huì)報(bào)錯(cuò)。

使用demo:

var a={};

Object.defineProperty(a,"testDemo",{

? ? set:function(val){

? ? ? ? ?console.log(val);

? ? },

? ? get:function(){

? ? ? ? ? return ?"get內(nèi)容"

? ? }

})

a.testDemo="我是set";//我是set

console.log(a.testDemo);//get內(nèi)容

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

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

  • 來自:參 考 原 文 對(duì)象是由多個(gè)名/值對(duì)組成的無序的集...
    wyude閱讀 1,358評(píng)論 1 7
  • JS基礎(chǔ)講解 JavaScript組成ECMAScript:解釋器、翻譯DOM:Document Object M...
    FConfidence閱讀 626評(píng)論 0 1
  • 盡管javascript里有大量內(nèi)建引用對(duì)象,很可能你還說會(huì)頻繁創(chuàng)建自己的對(duì)象。當(dāng)你在這么做的時(shí)候,記得javas...
    WanLum閱讀 602評(píng)論 1 3
  • 感謝網(wǎng)絡(luò),讓我遇到你,這么可愛的你,素未謀面,卻讓我感到如此安心。人如其名。今天你說想我了,我可以告訴你我也有同...
    瞳小瞳閱讀 200評(píng)論 1 1
  • 第二天。好快呀,種子冒白了,等著長出小芽兒。
    陳田有閱讀 215評(píng)論 0 0

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