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>