vue用Object.defineProperty手写一个简单的双向绑定的示例
程序员文章站
2022-07-12 22:54:14
...
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>双向绑定</title>
</head>
<body>
手写一个简单双向绑定<br/>
<input type="text" id="model"><br/>
<div id="modelText"></div>
</body>
<script>
var model = document.querySelector("#model");
var modelText = document.querySelector("#modelText");
var defaultName = "defaultName";
var userInfo = {}
model.value = defaultName;
modelText .textContent=defaultName;
Object.defineProperty(userInfo, "name", {
get: function () {
console.log("你来拿值啦!");
return defaultName; // //这里不能直接用userInfo.name,执行.又会进入defineProperty
},
set: function (value) {
defaultName = value;
model.value = value; //值改变的时候触发数据更新
console.log("你来修改值啦!");
console.log(value);
modelText.textContent = value;
}
})
userInfo.name = "new value";
var isEnd = true;
model.addEventListener("keyup", function () {
if (isEnd) {
userInfo.name = this.value;
}
}, false)
//加入监听中文输入事件
model.addEventListener("compositionstart", function () {
console.log("开始输入中文啦");
isEnd = false;
})
model.addEventListener("compositionend", function () {
isEnd = true;
console.log("结束输入中文啦");
})
</script>
</html>
上一篇: AcWing 1402 星空之夜
推荐阅读
-
用vue的双向绑定简单实现一个todo-list的示例代码
-
用ES6的class模仿Vue写一个双向绑定的示例代码
-
用object.defineproperty()和proxy实现简单的双向绑定,并比较两者优劣
-
vue用Object.defineProperty手写一个简单的双向绑定的示例
-
利用Object.defineProperty实现一个简单的MVVM双向绑定
-
简单实现Vue2.0(Object.defineProperty)和Vue3.0(Proxy)的数据双向绑定
-
JS ES6用Proxy模拟一个简单的数据双向绑定
-
vue用Object.defineProperty手写一个简单的双向绑定的示例
-
用vue的双向绑定简单实现一个todo-list的示例代码
-
用ES6的class模仿Vue写一个双向绑定的例子