查詢 Property 的組態
前言
在先前的 在 Object 中定義 Property 介紹過自定義的 Property ,Property 在定義時要設定 Property 的組態,如可不可寫,定義完後可以查詢嗎?在此把學習的過程做個紀錄。4
內容
要得到 Property 的組態可以透過 Object.getOwnPropertyDescriptor() ,範例如下
let obj = { a : 10 }; Object.defineProperty( obj , 'prop1' ,{ value : 20 } ); Object.defineProperty( obj , 'prop2' ,{ value : 30, writable:true } ); // descriptorA = Object.getOwnPropertyDescriptor(obj, 'a'); console.log( descriptorA.value );//10 console.log( descriptorA.writable );//true descriptorA.writable = false; obj.a = 100; console.log( obj.a );//100 // descriptorProp1 = Object.getOwnPropertyDescriptor(obj, 'prop1'); console.log( descriptorProp1.value );//20 console.log( descriptorProp1.writable );//false // descriptorProp2 = Object.getOwnPropertyDescriptor(obj, 'prop2'); console.log( descriptorProp2.value );//30 console.log( descriptorProp2.writable );//true
透過 Object.getOwnPropertyDescriptor() 可以的到 Desciptor ,透過讀取該物件的 Property 就可以知道 Property 的組態 ,範例的 a 是一般的 Property,從 value 與 writable 讀出來的值如預期,可以透過 Desciptor 讀取組態,那可以透過 Desciptor 改變組態嗎?範例透過改變 Desciptor 的 writable 來實驗,結果是"不行"!接著實驗自定義的 Property ,prop1 與 porp2 皆如預期。
參考資料
[ developer.mozilla.org ] Object.getOwnPropertyDescriptor()
沒有留言:
張貼留言