js 对象使用的小技巧实例分析


Posted in Javascript onNovember 08, 2019

本文实例讲述了js 对象使用的小技巧。分享给大家供大家参考,具体如下:

js中中,Object,Array ,Function 等都属于引用类型,他们的变量名都是指向对象的指针。

这样就有一个好处,当处理一个复杂json树的时候,想要单独改变其中某一个子对象属性时,不需要根据对象id遍历查找到这个对象了,而是可以直接通过事件方式将这个对象通过参数的方式赋值给一个专属变量,这个变量就指向这个对象,这样就可以随意改变对象属性了。改变这个变量对应的对象,整个json树中的这个对象也被相应的改变。

下面举个栗子,有点类似于双向绑定,点击哪个对象就可以单独修改这个对象,修改后会在json树中更新数据

js 对象使用的小技巧实例分析

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div >
            <ul id="classmates">
            </ul>
            <div class="edit">
                <span>姓名:</span>
                <input type="text" value="" name="name"/>
                <br />
                <span>年龄:</span>
                <input type="text" value="" name="age"/>
            </div>
        </div>
        <script type="text/javascript">
            //保存选中的同学
            var classmate={
                name:"",
                age:""
            }
            //同学列表
            var arr=[
                {
                    name:"小明",
                    age:22
                },
                {
                    name:"小黑",
                    age:23
                },
                {
                    name:"小红",
                    age:24
                },
                {
                    name:"小白",
                    age:25
                }
            ];
            var nameNode=document.querySelector("input[name='name']");
            var ageNode=document.querySelector("input[name='age']");
            nameNode.addEventListener("keyup",function(){
                classmate.name=nameNode.value;
                update()
                //console.log(classmate)
            })
            ageNode.addEventListener("keyup",function(){
                classmate.age=ageNode.value;
                update()
            })
            //进行双向绑定
            Object.defineProperty(classmate,'name',{
                get:function(){
                    return classmate['name']
                },
                set:function(val){
                    classmate['name'] = val;
                }
            })
            Object.defineProperty(classmate,'age',{
                get:function(){
                    return classmate['age']
                },
                set:function(val){
                    classmate['age'] = val;
                }
            })
            //重绘ul列表
            function update(){
                document.querySelector("#classmates").innerHTML="";
                for(var i=0;i<arr.length;i++){
                    var classmate=arr[i];
                    var li="<li>姓名:"+classmate.name + ";年龄:"+classmate.age +"</li>";
                    var liNode=parseElement(li);
                    liNode.addEventListener("click",showClassmate(classmate))
                    document.querySelector("#classmates").appendChild(liNode)
                }
            }
            update()
            //点击同学
            function showClassmate(data){
                return function(){
                    classmate=data;
                    nameNode.value=classmate.name;
                    ageNode.value=classmate.age;
                }
            }
            //将字符串变成node对象
            function parseElement(htmlString){
                return new DOMParser().parseFromString(htmlString,'text/html').body.childNodes[0]
            }
        </script>
    </body>
</html>

这里面的json数据较简单,如果面对复杂的多层关系树,通过这种方式修改数据会很方便

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
模仿jQuery each函数的链式调用
Jul 22 Javascript
16个最流行的JavaScript框架[推荐]
May 29 Javascript
对之前写的jquery分页做下升级
Jun 19 Javascript
Node.js Sequelize如何实现数据库的读写分离
Oct 23 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
Dec 29 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
Jun 12 Javascript
JavaScript实现三级级联特效
Nov 05 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
Aug 07 Javascript
JS实现多功能计算器
Oct 28 Javascript
JS对日期操作封装代码实例
Nov 08 #Javascript
vue之组件内监控$store中定义变量的变化详解
Nov 08 #Javascript
js 递归json树实现根据子id查父id的方法分析
Nov 08 #Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 #Javascript
微信小程序在text文本实现多种字体样式
Nov 08 #Javascript
浅谈vuex的基本用法和mapaction传值问题
Nov 08 #Javascript
微信小程序select下拉框实现源码
Nov 08 #Javascript
You might like
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
python实现simhash算法实例
2014/04/25 Python
Python3遍历目录树实现方法
2015/05/22 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
python实现简单猜单词游戏
2020/12/24 Python
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
工作时间上网检讨书
2014/02/03 职场文书
火锅店营销方案
2014/02/26 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
本科应届生自荐信
2014/06/29 职场文书
工作犯错保证书
2015/05/11 职场文书