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 SHA-1:Secure Hash Algorithm
Dec 20 Javascript
JavaScript脚本语言在网页中的简单应用
May 13 Javascript
科讯商业版中用到的ajax空间与分页函数
Sep 02 Javascript
关于B/S判断浏览器断开的问题讨论
Oct 29 Javascript
用JS写的一个TableView控件代码
Jan 23 Javascript
获取鼠标在div中的相对位置的实现代码
Dec 30 Javascript
如何用jquery控制表格奇偶行及活动行颜色
Apr 20 Javascript
JavaScript组件焦点与页内锚点间传值的方法
Feb 02 Javascript
TypeScript 中接口详解
Jun 19 Javascript
JS+CSS实现简易的滑动门效果代码
Sep 24 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
代码详解Vuejs响应式原理
Dec 20 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使用CURL伪造IP和来源实例详解
2015/01/15 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
如何理解委托
2012/01/06 面试题
最新大学生创业计划书写作攻略
2014/04/02 职场文书
房产买卖委托公证书
2014/04/04 职场文书
高一新生军训方案
2014/05/12 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
社区干部培训心得体会
2016/01/06 职场文书
警用民用对讲机找不同
2022/02/18 无线电
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫