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 22 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
Nov 12 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
jQuery实现自动调整字体大小的方法
Jun 15 Javascript
JS框架之vue.js(深入三:组件1)
Sep 29 Javascript
JS 实现随机验证码功能
Feb 15 Javascript
vue component组件使用方法详解
Jul 14 Javascript
Angularjs中数据绑定的实例详解
Aug 25 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
Oct 09 Javascript
原生js实现购物车功能
Sep 23 Javascript
JavaScript缓动动画函数的封装方法
Nov 25 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 实现多服务器共享 SESSION 数据
2009/08/15 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
javascript self对象使用详解
2016/10/18 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
python多线程扫描端口示例
2014/01/16 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
python字典的常用方法总结
2019/07/31 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
文员试用期转正自我鉴定
2014/09/14 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
创业计划书之便利店
2019/09/05 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
django中websocket的具体使用
2022/01/22 Python
Go获取两个时区的时间差
2022/04/20 Golang