1、对象的基本操作 create set query delete test enumerate
2、对象的属性特性 可写 可枚举 可配置(是否可删除)
3、对象的对象特性
对象的原型 prototype
对象的类 标示对象类型的字符串
对象的扩展标记 是否可添加新属性
//创建对象的三种方法
4、对象直接量
var empty = {};
var point = {x:0,y:0};
5、new创建对象
var o = new Object(); //空对象 和{}一样
var a = new Array();
6、Object.create()
var o1 = Object.create({x:1,y:2}); //o1 继承自对象原型{x:1,y:2}
var o2 = Object.create(null); //o2不继承任何属性和方法
var o3 = Object.create(Object.prototype);
//空对象和 {} new Object()一样
7、属性的操作 作为关联数组的对象
object.property
object["property"] 散列 映射 字典 关联数组
8、继承
js的继承只能从父类获取属性的值,而不能修改原型链
如果对象book为null或undefined
book.subtitle.length会报错
解决方法
var len = book && book.subtitle && book.subtitle.length;
删除属性
delete book.subtitle
检测属性 in hasOwnPreperty() propertyIsEnumerable()
var o = {x:1};
"x" in o
"toString" in
hasOwnPreperty();判断属性是否是自己的。继承属性返回false
propertyIsEnumerable() 只有是自有属性,并可枚举
获取所有属性
Object.keys()
Object.getOwnPropertyNames()
9、属性getter和setter
var o = {
x: 0,
y: 1,
set r(value) { value = this.r;},
get r() { return this.x + this.y;}
};
x数据属性,r存取器属性
10、属性的特性 ecmascript5 老的ie不支持如下用法
数据属性的特性:值value 可写性writable
可枚举enumerable
可配置configurable
存取器属性特性:get set
可枚举enumerable
可配置configurable
//返回{value:1,writable:true,emunerable:true,configurable:true}
Object.getOwnPropertyDescriptor({x:1},x)
//查不到属性 返回undefined
设置属性的特性 不能修改继承的属性特性
Object.defineProperty()
//设置不可枚举属性
var o = {};
Object.defineProperty(o,"x",{
value:1,
writable:true,
emunerable:false,
configurable:true
})
//设置只读
Object.defineProperty(o,"x",{writable:false})
修改多个属性特性
Object.defineProperties()
扩展Object.prototype 书 P137
11、对象的三个属性
prototype class extensible attribute
查询对象的原型
ecmascript5中 Object.getPrototypeOf(o1)
ecmascript3中 o1.constructor.prototype
通过对象直接量或new Object()方式创建的对象
包含一个constructor的属性,指Object()的构造函数
constructor.prototype才是真正的原型
p.isPrototypeOf(o)检测对象p是否是o的原型
//获取对象的类型 字符串
Object.prototype.toString.call(o1).slice(8,-1)
12、对象的可扩展性
对象是否可以新加属性
Object.preventExtensions() 设置对象不可扩展
Object.isExtensible()
Object.seal() 除了将对象设置为不可扩展,还将属性设置为不可配置
Object.freeze()
除了将对象设置为不可扩展,将属性设置为不可配置,还把属性设置为只读