浅谈vue中数据双向绑定的实现原理
发布时间 - 2026-01-11 03:15:20 点击率:次vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下。

首先大致学习了解下Object.defineProperty()这个东东吧!
* Object.defineProperty()
* 对对象的属性进行 定义/修改
* */
let obj = {x:10}
// 这两种方式都相对来说比较简单,直接,但是有些时候我们需要对对象的属性的修改和增加进行必要的干预
// obj.y = 20;
// obj.x = 100;
// obj.x = 'abc';
//
// let arr = [1,2,3];
// arr.length = 'abc';//不可更改
// console.log(arr);
// console.log(obj.x);
// delete obj.x;
// console.log(obj);
Object.defineProperty(obj, 'y', {
configurable: false, //设置是否可删除 false为不可删除
value: 100
});
console.log(obj);
delete obj.y;//删除
console.log(obj);
//设置对象某个属性值的时候,顺便设置它的属性。enumerable 可枚举 configurable 可以删除否 writable 可改值否
Object.defineProperty(obj, 'z', {//enumerable 可枚举(没有则新添加)
enumerable: true,//为false时,for..in object.keys json.stringfy 不能取到该z属性
value: 10000
});
for (var attr in obj) {
console.log(attr);
}
Object.defineProperty(obj, 'm', {
writable: false,//可更改
value: 9
});
console.log(obj);
obj.m = 100;
console.log(obj);
以上总结了对象的defineProperty四个属性:configurable,enumerable,value,writable
接下来再深入认识下它的另外两个方法:set 以及get
注意:get和set不能与configurable,enumerable,value,writable同时存在
let obj = {x:10}
let y = 100;
Object.defineProperty(obj, 'y', {
get() {
//当obj的y属性被调用的时候触发,该方法的返回值将作为获取的结果
console.log('get');
return y;
},
set(value) {
//当obj的y属性被设置的时候触发
console.log('set', value);
y = value;
}
})
console.log(obj.y);
obj.y = 1;
console.log(obj.y);
介绍完defineProperty了,最后我们一起看看如何简单的实现数据双向绑定吧!
<body>
<input type="text" id="age">
<h1></h1>
<script>
var ageElement = document.querySelector('#age');
var h1Element = document.querySelector('h1');
let obj = {};
Object.defineProperty(obj, 'age', {
get() {
},
set(value) {
ageElement.value = value;
h1Element.innerHTML = value;
}
})
obj.age = 10;
ageElement.oninput = function() {
obj.age = this.value;
}
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue实现双向数据绑定
# vue双向绑定实现原理
# vue双向绑定原理
# Vue数据双向绑定原理实例解析
# Vue的双向数据绑定实现原理解析
# 详解Vue双向数据绑定原理解析
# vue双向数据绑定原理探究(附demo)
# 深入了解Vue中双向数据绑定原理
# 它是
# 我们一起
# 定了
# 这两种
# 能与
# 绑定
# 最常见
# 大家多多
# 到该
# 如何实现
# 解下
# 很好奇
# 返回值
# 总结了
# arr
# console
# vue
# length
# configurable
# false
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
bootstrap日历插件datetimepicker使用方法
如何在云主机上快速搭建多站点网站?
打造顶配客厅影院,这份100寸电视推荐名单请查收
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何破解联通资金短缺导致的基站建设难题?
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
网站建设保证美观性,需要考虑的几点问题!
Laravel中的Facade(门面)到底是什么原理
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何用虚拟主机快速搭建网站?详细步骤解析
JavaScript如何实现继承_有哪些常用方法
佛山企业网站制作公司有哪些,沟通100网上服务官网?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Python3.6正式版新特性预览
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
python中快速进行多个字符替换的方法小结
如何在阿里云通过域名搭建网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
在centOS 7安装mysql 5.7的详细教程
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Android利用动画实现背景逐渐变暗
详解Oracle修改字段类型方法总结
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel如何使用Sanctum进行API认证?(SPA实战)
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
智能起名网站制作软件有哪些,制作logo的软件?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
成都网站制作公司哪家好,四川省职工服务网是做什么用?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何处理CORS跨域请求?(配置示例)
如何基于云服务器快速搭建网站及云盘系统?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
如何快速查询域名建站关键信息?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Laravel怎么在Blade中安全地输出原始HTML内容
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Laravel如何实现数据库事务?(DB Facade示例)
如何在云指建站中生成FTP站点?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
如何自定义建站之星网站的导航菜单样式?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Laravel如何配置和使用缓存?(Redis代码示例)

