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 相关文章推荐
javascript中的对象和数组的应用技巧
Jan 07 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
Nov 18 Javascript
flexigrid 类似ext grid的JS表格代码
Jul 17 Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 Javascript
原生js结合html5制作简易的双色子游戏
Mar 30 Javascript
javascript学习笔记之函数定义
Jun 25 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
Feb 17 Javascript
js编写的treeview使用方法
Nov 11 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
Apr 16 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
php反射应用示例
2014/02/25 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
document.getElementById介绍
2011/09/13 Javascript
js Function类型
2011/12/04 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
python 实现插入排序算法
2012/06/05 Python
Python生成验证码实例
2014/08/21 Python
Python装饰器使用示例及实际应用例子
2015/03/06 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
留学经费担保书
2014/05/12 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers