今天翻了翻红宝书中关于对象的一章,我屮艸芔茻!!!!!!!
首先来一个创建自定义对象的基本方法:
var person = new Object();
person.name="rabbit";
person.age=18;
person.sex="female";
person.sayName=function(){
alert(this.name);
}
字面量创建对象:
var person={
name:"rabbit",
age:18,
sex:"female"
}
先说一下对象中的属性类型:
1、数据属性(即一般用来存放数据的属性)
该属性有四个特性:[[Configurable]] 是否可配置 [[Enumerable]] 是否可枚举 [[Writable]] 是否可写(修改) [[Value]] 存放属性值
[[Configurable]] :能否通过delete删除属性,能否修改属性的特性,能否修改属性为访问器属性。
[[Enumerable]] :能否可枚举。 [[Writable]] :能否修改属性值。直接在对象上定义的属性,其上面三个特性默认值都为true。
2、访问器属性(这类属性一般不会用来存放值,包含一对getter和setter函数)
访问该属性时自动调用getter函数,给该属性赋值时,自动调用setter函数。
该属性也有四个特性:前两个和数据属性相同,后两个是 [[Get]] 和 [[Set]] ,在读取和写入时调用的函数。
该属性的常见用法是,设置一个属性会导致其他属性的改变。
当只有set函数,没有get函数时,说明该访问器属性只可写,不可读。
当只有get函数,没有set函数时,说明该访问器属性只可读,不可写。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Object.defineProperty( obj,prop,desc ) 对象 属性 描述符对象
该方法用来定义一些属性,或者更改某些属性的特性。
var person={};
//给person对象添加一个name属性,值为"rabbit"
Object.defineProperty(person,"name",{
//writable:true, 这里设置为true即可修改该属性
value:"rabbit"
})
console.log(person.name); //输出rabbit
//默认使用这种方法添加的属性,前三个特性都是false
person.name="BIG";
console.log(person.name); //输出rabbit,因为[[Writable]]特性为false,不可修改
[[Configurable]]:该属性一旦设置为false,就不能设置为true,除了 [[Writable]] 特性外其他特性都不能再修改。
Object.defineProperties(obj,{}):定义多个属性
Object.defineProperties(book,{
name:{
value:"Book"
},
price:{
writable:true,
value:1000
}
})
Object.getOwnPropertyDescriptor(obj,"prop") , 读取属性的特性