<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Object.defineProperty()手写一个双向绑定示例</title>
<style>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
#modelText {
padding: 6px;
margin-top: 20px;
border: 1px solid #dedede;
}
</style>
</head>
<body>
<label for="model">请输入内容:<input type="text" id="model"></label>
<div id="modelText"></div>
<script>
const model = document.querySelector('#model');
const modeText = document.querySelector('#modelText');
let defaultText = 'defaultText';
const returnData = {};
let lock = true;
model.value = defaultText;
modelText.textContent = defaultText;
returnData.testValue = defaultText;
Object.defineProperty(returnData, 'testValue', {
get: function () {
console.log('获取值',);
return defaultText;
},
set: function (value) {
console.log('设置取值', value);
defaultText = value;
model.value = value;
modelText.textContent = value;
}
});
model.addEventListener('keyup', function () {
if (lock) { returnData.testValue = this.value; }
});
model.addEventListener('compositionstart', function () { console.log('中文输入开始'); lock = false; });
model.addEventListener('compositionend', function () { console.log('中文输入结束'); lock = true; });
</script>
</body>
</html>