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);