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 相关文章推荐
js判断屏幕分辨率的代码
Jul 16 Javascript
JavaScript实现页面实时显示当前时间的简单实例
Jul 20 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
扒一扒JavaScript 预解释
Jan 28 Javascript
JavaScript实现Fly Bird小游戏
Dec 15 Javascript
详解数组Array.sort()排序的方法
May 09 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
Apr 25 jQuery
JS switch判断 三目运算 while 及 属性操作代码
Sep 03 Javascript
react-native中ListView组件点击跳转的方法示例
Sep 30 Javascript
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
详解微信小程序的 request 封装示例
Aug 21 Javascript
一个手写的vue放大镜效果
Aug 09 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字符串 ==比较运算符的副作用
2009/10/21 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
JavaScript更改class和id的方法
2008/10/10 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
python原始套接字编程示例分享
2014/02/21 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
上课说话检讨书大全
2014/01/22 职场文书
英语教研活动总结
2014/07/02 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2015年市场部工作总结
2015/04/30 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
Win11查看设备管理器
2022/04/19 数码科技