1、自定義對(duì)象
1.1、什么是自定義對(duì)象
在Javascript中,除了js本身提供的自定義對(duì)象外(如Array、Date、Number等),用戶還可以自己創(chuàng)建對(duì)象,這種由用戶自己創(chuàng)建的對(duì)象就被稱為自定義對(duì)象。
1.2、自定義對(duì)象特性
1.2.1、“字典”結(jié)構(gòu):對(duì)象的屬性由鍵/值對(duì)的形式組成,屬性名是字符串,屬性值可以是任意類型。
<script type="text/javascript">
var a = {
a:1
}
console.log(a.a)
</script>
1.2.2、原型繼承:Js的自定義對(duì)象可以繼承原型的屬性。
<script type="text/javascript">
function fun(a){
this.a = a;
}
//prototype:使得我們能夠向構(gòu)造函數(shù)添加方法和屬性
fun.prototype.b = function(){
console.log(this.a)
}
var func = new fun("a")
func.b();
</script>
1.2.3、動(dòng)態(tài)結(jié)構(gòu):可動(dòng)態(tài)的增添或刪除對(duì)象的屬性
<script type="text/javascript">
function a() {};
var _a = new a();
//動(dòng)態(tài)添加
_a.name = "_a";
_a.id = 1;
console.log(_a.name+"------"+_a.id)
//動(dòng)態(tài)刪除
delete _a.name;
console.log(_a)
</script>
1.2.4、引用類型:js中的對(duì)象為引用類型,即a為一個(gè)對(duì)象,b=a,改變b的話a也會(huì)被改變。我們也稱這種特性為淺拷貝
,這里b=a只是引用了a的地址,所以當(dāng)我們改變b時(shí),會(huì)根據(jù)地址將a也改變。
<script type="text/javascript">
var a = {
name:1
}
b = a;
b.name = 2
console.log(a)
</script>
2、創(chuàng)建自定義對(duì)象
Js中創(chuàng)建自定義對(duì)象,主要通過三種方式:
1、對(duì)象直接量:原型為Object.prototype(也被稱為字面量)。
2、構(gòu)造函數(shù):原型為構(gòu)造函數(shù)的prototype屬性。
3、Object.create():原型為傳入的第一個(gè)參數(shù),若第一個(gè)參數(shù)為null,以O(shè)bject.prototype為原型。
2.1、對(duì)象直接量
<script type="text/javascript">
var a = {
name:'a'
}
</script>
這種方法適合用在某個(gè)特定的作用域內(nèi)
2.2、構(gòu)造函數(shù)
<script type="text/javascript">
function Fun(){
}
var func = new Fun();
console.log(func)
</script>
構(gòu)造函數(shù)的函數(shù)名用駝峰法(即首字母大寫)表示,將它與普通函數(shù)區(qū)分開來。
2.3、Object.create()
<script type="text/javascript">
//創(chuàng)建一個(gè)原型為null的對(duì)象
var func = Object.create(null,{
a:{
value:"1",
}
})
</script>
create方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)接收創(chuàng)建對(duì)象的原型,可以為null,此時(shí)對(duì)象的原型為undefined;第二個(gè)參數(shù)接收一個(gè)屬性描述符。
3、序列化
序列化即是調(diào)用JSON方法,將對(duì)象轉(zhuǎn)化為字符串,也可以通過反序列化將字符串轉(zhuǎn)成對(duì)象。
3.1、JSON.stringify(object)
作用:把對(duì)象轉(zhuǎn)化成字符串。
<script type="text/javascript">
var func = Object.create(null,{
a:{
//設(shè)置允許對(duì)對(duì)象進(jìn)行枚舉,即遍歷,如果不設(shè)置,則輸出內(nèi)容為空
enumerable: true,
value:"1"
}
})
console.log(JSON.stringify(func))
</script>
3.2、JSON.parse(jsonStr)
作用:將json字符串轉(zhuǎn)成json對(duì)象
<script type="text/javascript">
var func = '{"a":1}'
console.log(JSON.parse(func))
</script>