亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

更多QQ空间微信QQ好友腾讯朋友复制链接
您的位置:首頁/技術文章
文章詳情頁

javascript用defineProperty實現簡單的雙向綁定方法

【字号: 作者:豬豬瀏覽:74日期:2023-11-06 13:05:22

defineProperty

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

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

在node中執行結果如下:

javascript用defineProperty實現簡單的雙向綁定方法

下面來分析一下代碼首先定一個對象,并對對象添加一個自定義屬性value,同時添加了getter,setter兩個函數用來分別控制value屬性的修改和獲取,當執行obj.value = 3;時,會自動調屬性的setter方法,將value的修改同步到_value屬性上,當執行obj.value語句獲取屬性值時,會自動調用getter方法獲取方法的返回值;

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

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

雙向綁定

由此可以設計一下數據雙向綁定的簡單實現:在數據對象內定義屬性,通過對dom綁定事件監聽dom內值的變化,并賦值給數據對象,數據對象的改動會調用自身的setter方法,在方法內在動態修改dom內容。

代碼如下:

<!-- 簡單數據雙向綁定實現 --><!DOCTYPE html><html> <head> <meta charset='utf-8'> </head> <body> <div id='root'> <button id=’btn’>請求數據</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>數據模型:</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>

描述有點亂,看實現代碼更清晰一點,有問題歡迎指正

到此這篇關于javascript用defineProperty實現簡單的雙向綁定方法的文章就介紹到這了,更多相關javascript defineProperty雙向綁定內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 欧美成人午夜剧场 | 黄色片免费在线观看视频 | 欧美黄成人免费网站大全 | 久久er精品 | 91影视在线看免费观看 | 97国产大学生情侣11在线视频 | 男人和女人全黄一级毛片 | 一级毛片免费播放视频 | 亚洲国产成人精品女人久久久 | 国产不卡免费视频 | 尤物视频在线观看入口 | 蜜桃臀久久伊人福利 | 国产成 人 色综合 亚洲 | 出a级黑粗大硬长爽猛视频 加勒比一道本综合 | 免费看全黄特黄毛片 | 欧洲黄色网 | 国产99精品一区二区三区免费 | 一级黄色在线观看 | 未成人禁止视频高清在线观看 | 香蕉视频国产精品人 | 国产限制级在线 | 亚洲黑人巨大videos0 | 青草视频久久 | 一级黄色录像视频 | 亚洲国产精品久久综合 | 久久香蕉国产线看观看乱码 | 免费一看一级毛片 | 欧美精品播放 | 一区二区三区四区在线视频 | 成人免费淫片在线费观看 | 欧美日韩在线播放 | 欧美黄色性生活视频 | 国产无遮挡又爽又色又刺激 | 精品视频中文字幕 | 草草免费 | 国产麻豆剧传媒精品国产免费 | 久久久中文字幕日本 | 国产欧美精品系列在线播放 | 中文字幕日本一区久久 | 免费看的黄色大片 | 国产色婷婷精品综合在线 |