对象提供的方法,用于给对象添加自定义属性具体用法如下:
const obj={_value: 1}; Object.defineProperty (obj,“价值”,{ 得到:函数(){ console.log(“方法执行”); 返回this._value; }, 设置:函数(){ console.log(“集方法执行”); 这一点。_value=https://www.yisu.com/zixun/a; } }) obj。值=3; console.log (obj.value); console.log (obj._value);
在节点中执行结果如下:
下面来分析一下代码
首先定一个对象,并对对象添加一个自定义属性价值,同时添加了getter、setter两个函数用来分别控制属价值性的修改和获取,
当执行<代码> obj。值=https://www.yisu.com/zixun/3;> 代码时,会自动调属性的setter方法,将价值的修改同步到_value属性上,当执行<代码> obj.value 代码>语句获取属性值时,会自动调用getter方法获取方法的返回值;
<强> 总结 强>(参考MDN)
该方法接收三个参数
obj:要添加属性的对象
道具:要定义的属性
描述符:要定义或者修改的属性描述符
其中描述符包含以下几种
1.可配置:布尔值,控制属性是否能改变(除了价值,可写)及删除
2.可列举的:布尔值,控制属性是否可枚举,即通过在循环或者对象。键访问
3.价值:属性值,可以时任何有效JavaScript值
4.可写的布尔值,属性可否通过赋值修改
5.得到:属性getter函数,执行时传入,这个值取决于调用者
6.设置:属性setter函数,赋值时执行,并传入这
由此可以设计一下数据双向绑定的简单实现:
在数据对象内定义属性,通过对dom绑定事件监听dom内值的变化,并赋值给数据对象、数据对象的改动会调用自身的setter方法,在方法内在动态修改dom内容。
代码如下:
& lt; !——简单数据双向绑定实现——比;
& lt; !DOCTYPE html>
& lt; html>
& lt; head>
& lt;元charset=皍tf - 8”比;
& lt;/head>
& lt; body>
& lt; div id=案北?
& lt;按钮id=癰tn”祝辞请求数据& lt;/button>
& lt;/div>
& lt;/body>
& lt; script>
const根=. getelementbyid(“根”);
const btn=. getelementbyid (btn);
常量输入=document.createElement(“输入”);
const模型=document.createElement (“p”);
const dataModel={
_value: 0,
}
Object.defineProperty (dataModel,“价值”,{
可配置:没错,
设置:函数(值){
这一点。_value=https://www.yisu.com/zixun/value;
输入。值=价值;
模型。innerHTML=' 数据模型: $ {value} ';
},
得到:函数(){
返回this._value;
}
})
btn。addEventListener(“点击”,()=比;{
常量范围=Math.floor(数学。随机(0,1)* 100);
dataModel。值=https://www.yisu.com/zixun/range;
})
input.addEventListener(“输入”(ev)=比;{
dataModel。值=https://www.yisu.com/zixun/ev.target.value;
})
const initPage=()=> {
dataModel。值=100;
}
initPage ();
root.append(输入);
root.append(模型);> 脚本