2.用法:字面量的形式创建对象,说白了就是“{}”。
3.对象中的属性,分为两种:数据属性和访问器属性;
3.1 数据属性:这种属性会有对应的值(可以认为就是我们常见的对象的属性),该属性的特性(如是否可以修改值,是否可以删除等等),分别是:configurable(是否可以删除属性等,默认true),enumerable(是否可以循环返回属性,默认true), writable(是否可以复写属性值,默认true),value(属性的值,默认undefined)
修改对象中数据属性的默认特性:Object.defineProperty(targetObj,property,descriptor),其中最后一个参数是一个对象,其属性是对象的数据属性的特性参数的一个或者多个;
var app = {
name:"王者荣耀",//数据属性
isPlayed:false//数据属性
}
Object.defineProperty(app,"name",{
writable:false,//不可更改
configurable:false//不可删除
})
app.name = "吃鸡游戏";
console.log(app.name)//还是“王者荣耀”
delete app.name;
console.log(app.name)//该属性还是存在,“王者荣耀”。
var person = {
name:"张三",
age:23
}
Object.defineProperty(person,"age",{configurable:true});
delete person.age;
console.log(person.age)//undefined,因为已经删除了
3.2 访问器属性:
归根结底还是对象中的属性,
只不过这种属性没有值--它们包含一对儿 getter 和 setter 函数,在读取访问器属性时,会调用 getter 函数,在设置访问器属性的时候,会调用setter函数并传入新值。
/* 访问器属性 */
var animal = {
class:"狗狗",
name:"哈士奇",
form:"地球",
_hobby:"⛏破坏"
}
// 定义对象animal的访问器属性hobby:怎么看着那么像设置访问器属性的特性??
Object.defineProperty(animal,"hobby",{
configurable:false,//该属性不可删除
get:function(){//getter函数
return this._hobby;
},
set:function(newValue){//setter函数
alert(newValue)
}
})
alert(animal.hobby)//此时访问对象的访问器属性hobby,所以调用get函数,返回对象的“_hobby”属性
animal.hobby = "犯二"//犯二,此时是设置访问器属性,调用set函数,所以回弹出“犯二”
delete animal.hobby;//将删除属性,但是却删除不了
alert(animal.hobby)//访问该属性,所以会返回”⛏破坏“
4.一次给对象设置多种属性:
4.1 方法:Object.defineProperties(obj,{...}):通过这个方法可以一次性为对象同时定义这两种属性:obj是要对其定义的目标对象,{..}属性对象;
var douProp = {};
Object.defineProperties(douProp,{
height:{//数据属性
value:3.33
},
width:{//数据属性
value:9.00
},
length:{//访问器属性
get:function(){
return this.height
},
set:function(newValue){
alert(newValue)
}
}
})
4.2 获取对象属性的特性:Object.getOwnPropertyDescriptor(targetObj,prop):得到哪个对象的哪个属性的特性。