跳到主要内容

1 篇博文 含有标签「Object.defineProperty()」

查看所有标签

· 阅读需 1 分钟

最简单的双向数据绑定的实现,开始通过使用Object.defineProperty(),到ES6新增的Proxy的实现。

HTML

<div id="app">
<input type="text" id="inputTxt">
<input type="text" id="showTxt">
</div>

Object.defineProperty()

var obj = {};
Object.defineProperty(obj, 'txt', {
get: function () {
return obj;
},
set: function (newValue) {
document.getElementById('inputTxt').value = newValue;
document.getElementById('showTxt').value = newValue;
}
})
document.addEventListener('keydown', function (e) {
obj.txt = e.target.value;
})

Proxy

const obj = {};
const aProxy = new Proxy(obj, {
get: function(target, key, receiver){
return Reflect.get(target, key, receiver);
},
set: function (target, key, value, receiver) {
if(key === 'txt' && value !== undefined) {
document.getElementById('inputTxt').value = value;
document.getElementById('showTxt').value = value;
}
return Reflect.set(target, key, value, receiver);
}
});
document.addEventListener('keydown', function (e) {
aProxy.txt = e.target.value;
})