av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript用defineProperty實(shí)現(xiàn)簡(jiǎn)單的雙向綁定方法

瀏覽:107日期:2023-11-06 13:05:22

defineProperty

Object提供的方法,用于給對(duì)象添加自定義屬性具體用法如下:

const obj = { _value: 1 };Object.defineProperty(obj, ’value’, { get: function() { console.log(’get方法執(zhí)行’); return this._value; }, set: function(a) { console.log(’set方法執(zhí)行’); this._value = a; }})obj.value = 3;console.log(obj.value);console.log(obj._value);

在node中執(zhí)行結(jié)果如下:

javascript用defineProperty實(shí)現(xiàn)簡(jiǎn)單的雙向綁定方法

下面來(lái)分析一下代碼首先定一個(gè)對(duì)象,并對(duì)對(duì)象添加一個(gè)自定義屬性value,同時(shí)添加了getter,setter兩個(gè)函數(shù)用來(lái)分別控制value屬性的修改和獲取,當(dāng)執(zhí)行obj.value = 3;時(shí),會(huì)自動(dòng)調(diào)屬性的setter方法,將value的修改同步到_value屬性上,當(dāng)執(zhí)行obj.value語(yǔ)句獲取屬性值時(shí),會(huì)自動(dòng)調(diào)用getter方法獲取方法的返回值;

總結(jié) (參考MDN)該方法接收三個(gè)參數(shù)obj:要添加屬性的對(duì)象prop: 要定義的屬性descriptor:要定義或者修改的屬性描述符其中描述符包含以下幾種

1.configurable:布爾值,控制屬性是否能改變(除了value,writable)及刪除2.enumerable: 布爾值,控制屬性是否可枚舉,即通過(guò)for in循環(huán)或者Object.keys訪問(wèn)3.value:屬性值,可以時(shí)任何有效JavaScript值4.writable 布爾值,屬性可否通過(guò)賦值修改5.get:屬性getter函數(shù),執(zhí)行時(shí)傳入this,this值取決于調(diào)用者6.set:屬性setter函數(shù),賦值時(shí)執(zhí)行,并傳入this

雙向綁定

由此可以設(shè)計(jì)一下數(shù)據(jù)雙向綁定的簡(jiǎn)單實(shí)現(xiàn):在數(shù)據(jù)對(duì)象內(nèi)定義屬性,通過(guò)對(duì)dom綁定事件監(jiān)聽(tīng)dom內(nèi)值的變化,并賦值給數(shù)據(jù)對(duì)象,數(shù)據(jù)對(duì)象的改動(dòng)會(huì)調(diào)用自身的setter方法,在方法內(nèi)在動(dòng)態(tài)修改dom內(nèi)容。

代碼如下:

<!-- 簡(jiǎn)單數(shù)據(jù)雙向綁定實(shí)現(xiàn) --><!DOCTYPE html><html> <head> <meta charset='utf-8'> </head> <body> <div id='root'> <button id=’btn’>請(qǐng)求數(shù)據(jù)</button> </div> </body> <script> const root = document.getElementById(’root’); const btn = document.getElementById(’btn’); const input = document.createElement(’input’); const model = document.createElement(’p’); const dataModel = { _value:0, } Object.defineProperty(dataModel, ’value’, { configurable: true, set:function(value){this._value = value;input.value = value;model.innerHTML = `<span>數(shù)據(jù)模型:</sapn> ${value}`; }, get:function(){return this._value; } }) btn.addEventListener(’click’, () => { const range = Math.floor(Math.random(0, 1) * 100); dataModel.value = range; }) input.addEventListener(’input’,(ev) => { dataModel.value = ev.target.value; }) const initPage = () => { dataModel.value = 100; } initPage(); root.append(input); root.append(model); </script></html>

描述有點(diǎn)亂,看實(shí)現(xiàn)代碼更清晰一點(diǎn),有問(wèn)題歡迎指正

到此這篇關(guān)于javascript用defineProperty實(shí)現(xiàn)簡(jiǎn)單的雙向綁定方法的文章就介紹到這了,更多相關(guān)javascript defineProperty雙向綁定內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 黄色免费小视频 | 91理论片午午伦夜理片久久 | 久久久国产精品人人片 | 精品日韩一区二区三区 | www.九九热 | 亚洲小视频| 一级黄色录像带 | 天天综合天天 | 成人高清视频在线观看 | 在线免费观看黄色片 | 九九热视频在线观看 | 久久精品网| 色伊人网 | 日韩有码av | av片在线观看 | a视频在线观看 | 日韩一区二区三区视频 | 日韩高清在线播放 | 日韩精品极品 | 日韩一级欧美一级 | 日本www色| 国产在线欧美 | 一级毛片免费播放视频 | 欧美精品成人 | 青草网| 黄色小说在线免费观看 | 久久精品欧美一区 | www.桃色av嫩草.com | av网站观看| 色综合欧美 | 免费看a级片 | 国产在线小视频 | 中文字幕自拍偷拍 | 在线观看h片| 一区二区三区不卡视频 | 性欧美精品 | www.三级 | 中文字字幕在线中文 | 欧美日韩精品一区二区在线播放 | 亚洲国产欧美在线 | 天天射天天舔 |