Oject.defineProperty() 是 JavaScript 中用于定義或修改對象的屬性的方法,可以控制屬性的特性(如可枚舉性、可配置性、可寫性等)
Object.defineProperty(obj, prop, descriptor)
obj:要在其上定義屬性的對象。
prop:要定義或修改的屬性的名稱。
descriptor:屬性的描述符對象,包含屬性的特性設置。
descriptor 對象包含以下屬性:
configurable:屬性是否可配置,默認為 false。
enumerable:屬性是否可枚舉,默認為 false。
value:屬性的值,默認為 undefined。
writable:屬性是否可寫,默認為 false。
get:獲取屬性值的函數。
set:設置屬性值的函數
<input type="text" placeholder="請輸入" id="aInput" /><span id="txtName"></span>
```javascript
//eg:1 數據促使視圖發生變化let aInput = document.getElementById("aInput")let label = document.getElementById("txtName")let obj = {name: ''}Object.defineProperty(obj, 'name', {get() {console.log("get")return obj.name //返回值將被用作該屬性的值},set(val) { //當該屬性被賦值時,將調用此函數,并帶有一個參數(要賦給該屬性的值)console.log("set", val)aInput.value = vallabel.innerHTML = val}})aInput.oninput = function() {obj.name = aInput.value}// setTimeout(() => {// obj.name = '哈哈改變了'// }, 2000)//eg:2let bvalue = 50let o = {}Object.defineProperty(o, 'b', {get() {return bvalue},set(val) {console.log("Seto", val)bvalue = valconsole.log("bvalue", bvalue)label.innerHTML = bvalue}})console.log("o", o.b)setTimeout(() => {o.b = 233333333333}, 1500)console.log("o", o.b)console.log("bvalue", bvalue);