本文主要介绍一个简单的双向绑定方法,由javascript用defineProperty实现。通过示例代码进行了非常详细的介绍,对于大家的学习或者工作都有一定的参考价值。有需要的朋友就跟着下面的边肖学习吧。
defineProperty
Object提供的方法用于向对象添加自定义属性。具体用法如下:
const obj={ _ value:1 };
Object.defineProperty(obj,' value ',{
get: function() {
Console.log('get方法执行');
归还这个。_ value
},
设置:功能(a) {
Console.log('设置方法执行');
这个。_ value=a;
}
})
obj . value=3;
console . log(obj . value);
console.log(对象。_ value);
节点中的执行结果如下:
下面我们来分析一下代码。
首先,定义一个对象,并向该对象添加一个自定义属性值。同时增加了getter、setter函数,分别控制value属性的修改和获取。
当obj.value=3时执行;当为时,属性的setter方法会自动调整,value的修改会同步到_value属性。当执行obj.value语句获取属性值时,会自动调用getter方法获取方法的返回值。
总结 (参考MDN)
该方法接收三个参数。
要添加属性的对象。
属性:要定义的属性
描述符:要定义或修改的属性描述符。
描述符包括以下内容
1.configurable:布尔值,控制属性是否可以更改(value除外,可写)和删除。
2.enumerable:布尔值,控制属性是否可以枚举,即通过for in循环或Object.keys访问
3.value:属性值,可以是任何有效的JavaScript值。
4.可写布尔值,可以通过赋值修改属性吗?
5.get:属性的getter函数,执行时,this,this传入。这个值取决于调用者。
6.set:属性setter函数,赋值时执行,传入这个。
双向绑定
因此,我们可以设计一个简单的双向数据绑定实现:
在数据对象中定义属性,通过dom绑定事件监控dom中值的变化,并给数据对象赋值。数据对象的更改将调用它自己的setter方法,dom内容将在该方法中动态修改。
代码如下:
!-简单数据双向绑定的实现-
!文档类型html
超文本标记语言
头
meta charset='utf-8 '
/头
身体
div id='root '
按钮id='btn '请求数据/按钮
/div
/body
脚本
const root=document . getelementbyid(' root ');
const BTN=document . getelementbyid(' BTN ');
const input=document . createelement(' input ');
const model=document . createelement(' p ');
常量数据模型={
_value:0,
}
Object.defineProperty(数据模型,'值',{
可配置:真,
集合:函数(值){
这个。_value=值;
input.value=值;
Model.innerHTML=`span数据模型:/SAPN $ { value } `;
},
get:function(){
归还这个。_ value
}
})
btn.addEventListener('click ',()={
const range=math . floor(math . random(0,1)* 100);
dataModel.value=range
})
input.addEventListener('input ',(ev)={
data model . value=ev . target . value;
})
const initPage=()={
dataModel.value=100
}
init page();
root.append(输入);
root.append(模型);
/脚本
/html
描述有点乱,看看实现代码就更清楚了。有问题请指正。
关于javascript使用defineProperty实现简单双向绑定方法的这篇文章到此为止。更多相关javascript defineProperty双向绑定内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。