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,angular,react数据双向绑定原理分析,包括了浅谈vue,angular,react数据双向绑定原理分析的使用技巧和注意事项,需要的朋友参考一下 传统做法 前端维护状态,手动操作DOM更新视图。前端框架对服务器数据通过模版进行渲染。当用户产生了一个动作之后,我们通过document.getElementBy... 手动进行DOM更新。 框架帮忙分离数据和视图,后续
本文向大家介绍浅谈AngularJs 双向绑定原理(数据绑定机制),包括了浅谈AngularJs 双向绑定原理(数据绑定机制)的使用技巧和注意事项,需要的朋友参考一下 那么什么是双向绑定,下面简单进行讲解。 首先我们要理解数据绑定。我们看到的网站页面中,是由数据和设计两部分组合而成。将设计转换成浏览器能理解的语言,便是html和css主要做的工作。而将数据显示在页面上,并且有一定的交互效果(比如点
本文向大家介绍浅谈Vue数据绑定的原理,包括了浅谈Vue数据绑定的原理的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Vue数据绑定的原理,分享给大家,具体如下: 原理 其实原理很简单,就是拦截了Object的get/set方法,在对数据进行set (obj.aget=18) 时去重现渲染视图 实现方式有两种 方式1 定义了同名的get/set就相当于定义了age 为了让test不显示多余的变
本文向大家介绍Vue实现双向数据绑定,包括了Vue实现双向数据绑定的使用技巧和注意事项,需要的朋友参考一下 Vue实现双向数据绑定的方式,具体内容如下 Vue是如何实现双向数据绑定的呢?答案是前端数据劫持。其通过Object.defineProperty()方法,这个方法可以设置getter和setter函数,在setter函数中,就可以监听到数据的变化,从而更新绑定的元素的值。 实现对象属性变化
本文向大家介绍Vue双向数据绑定(MVVM)的原理,包括了Vue双向数据绑定(MVVM)的原理的使用技巧和注意事项,需要的朋友参考一下 MVVM MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定。 V
本文向大家介绍浅谈mvvm-simple双向绑定简单实现,包括了浅谈mvvm-simple双向绑定简单实现的使用技巧和注意事项,需要的朋友参考一下 mvvm模式解放DOM枷锁 mvvm原理分析 JavaScript在浏览器中操作HTML经历了几个不同阶段 第一阶段 直接用浏览器提供的原生API操作DOM元素 第二阶段 jQuery的出现解决了原生API的复杂性和浏览器间的兼容性等问题,提供了更加简