js 對象使用的小技巧實例分析
本文實例講述了js 對象使用的小技巧。分享給大家供大家參考,具體如下:
js中中,Object,Array ,Function 等都屬于引用類型,他們的變量名都是指向?qū)ο蟮闹羔槨?/p>
這樣就有一個好處,當處理一個復雜json樹的時候,想要單獨改變其中某一個子對象屬性時,不需要根據(jù)對象id遍歷查找到這個對象了,而是可以直接通過事件方式將這個對象通過參數(shù)的方式賦值給一個專屬變量,這個變量就指向這個對象,這樣就可以隨意改變對象屬性了。改變這個變量對應的對象,整個json樹中的這個對象也被相應的改變。
下面舉個栗子,有點類似于雙向綁定,點擊哪個對象就可以單獨修改這個對象,修改后會在json樹中更新數(shù)據(jù)

<!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數(shù)據(jù)較簡單,如果面對復雜的多層關(guān)系樹,通過這種方式修改數(shù)據(jù)會很方便
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》
希望本文所述對大家JavaScript程序設計有所幫助。
- JS利用map整合雙數(shù)組的小技巧分享
- JavaScript的一些小技巧分享
- 11個Javascript小技巧幫你提升代碼質(zhì)量(小結(jié))
- 9個JavaScript日常開發(fā)小技巧
- JavaScript編碼小技巧分享
- JavaScript前端開發(fā)時數(shù)值運算的小技巧
- 處理JavaScript值為undefined的7個小技巧
- JS 邏輯判斷不要只知道用 if-else 和 switch條件判斷(小技巧)
- javascript json對象小技巧之鍵名作為變量用法分析
- JavaScript中的一些實用小技巧總結(jié)
- JavaScript實用代碼小技巧
- JS 中可以提升幸福度的小技巧(可以識別更多另類寫法)
- 讓你5分鐘掌握9個JavaScript小技巧
- Spark SQL操作JSON字段的小技巧
- JavaScript小技巧帶你提升你的代碼技能
相關(guān)文章
微信小程序 flexbox layout快速實現(xiàn)基本布局的解決方案
flexbox layout 彈性盒子布局。彈性盒子可以快速的對小程序進行布局。這篇文章主要介紹了微信小程序 flexbox layout快速實現(xiàn)基本布局的方法,需要的朋友可以參考下2020-03-03
TypeScript環(huán)境搭建并且部署到VSCode的詳細步驟
本文給大家介紹TypeScript環(huán)境搭建并且部署到VSCode的詳細步驟,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-11-11
JavaScript中內(nèi)存泄漏的幾種情況總結(jié)
在JavaScript中,內(nèi)存泄漏通常是由于變量、對象、閉包、事件監(jiān)聽器等長期存在而沒有被釋放引起的。本文就來和大家總結(jié)一下常見的幾種情況以及解決方法吧2023-05-05
JavaScript中的普通函數(shù)與構(gòu)造函數(shù)比較
這篇文章主要介紹了JavaScript中的普通函數(shù)與構(gòu)造函數(shù)比較,需要的朋友可以參考下2015-04-04

