核心:Object.defineProperty 或 Proxy类 去操作底层默认行为。
Object.defineProperty 简单版:
/*html
...
<body>
<p>请输入:</p>
<input type="text" id="input">
<p id="p"></p>
</body>
<script>
const input = document.getElementById('input');
const p = document.getElementById('p');
Object.defineProperty(p, 'text', {
configurable: true,
enumerable: true,
get() {
return p.innerHTML;
},
set(newVal) {
p.innerHTML = newVal;
input.value = newVal;
return newVal;
}
})
input.addEventListener('keyup', (e) => {
p.text = e.target.value;
}, false)
</script>
...
*/
Proxy类 简单版:
/*html
...
<body>
<p>请输入:</p>
<input type="text" id="input">
<p id="p"></p>
</body>
<script>
const input = document.getElementById('input');
const p = document.getElementById('p');
const newObj = new Proxy(p, {
get: function (target, key, receiver) {
return Reflect.get(target, key, receiver);
},
set: function (target, key, value, receiver) {
if (key === 'text') {
input.value = value;
target.innerHTML = value;
}
return Reflect.set(target, key, value, receiver);
},
});
input.addEventListener('keyup', function (e) {
newObj.text = e.target.value;
},false);
</script>
...
*/