,,javascript用defineProperty实现简单的双向绑定方法

,,javascript用defineProperty实现简单的双向绑定方法

本文主要介绍一个简单的双向绑定方法,由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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: