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 相关文章推荐
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 Javascript
jQuery选择器总结之常用元素查找方法
Aug 04 Javascript
超实用的javascript时间处理总结
Aug 16 Javascript
基于Vue.js实现tab滑块效果
Jul 23 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
May 16 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
Aug 31 Javascript
javascript 对象 与 prototype 原型用法实例分析
Nov 11 Javascript
H5 js点击按钮复制文本到粘贴板
Nov 19 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
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+mysql 实现身份验证代码
2010/03/24 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
深入理解js promise chain
2016/05/05 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
原生js实现轮播图
2017/02/27 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
图文详解WinPE下安装Python
2016/05/17 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
python中强大的format函数实例详解
2018/12/05 Python
django如何通过类视图使用装饰器
2019/07/24 Python
Python如何省略括号方法详解
2020/03/21 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
研究生导师评语
2014/12/31 职场文书
银行资信证明
2015/06/17 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
java如何实现socket连接方法封装
2021/09/25 Java/Android