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 实现Tab效果 思路是js思路
Mar 02 Javascript
jQuery学习笔记之jQuery选择器的使用
Dec 22 Javascript
围观tangram js库
Dec 28 Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 Javascript
javascript实现图像循环明暗变化的方法
Feb 25 Javascript
javascript动态添加checkbox复选框的方法
Dec 23 Javascript
jQuery.parseHTML() 函数详解
Jan 09 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
Jun 03 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
vue-resourc发起异步请求的方法
Feb 11 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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
php生成验证码函数
2015/10/20 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python实现三次样条插值
2018/12/17 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
离职报告范文
2014/11/04 职场文书
大学生求职自荐信
2015/03/24 职场文书
小学生表扬稿范文
2015/05/05 职场文书
给下属加薪申请报告
2015/05/15 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript