JS对象
属性
检测属性
- JS对象可以看做属性的集合,可以通过in运算符、hasOwnPreperty()和propertyIsEnumerable()
in
var o={x:1}
"x" in o;//true
"y" in o;//false
"toString" in o;// true :o 继承toString 属性
hasOwnProperty() 用来检测给定的名字是否是对象的自有属性
- propertyIsEnumerable是hasOwnProperty()的增强版,只有检测到这个自由属性且这个属性的可枚举性为true时,它才返回true;
- !== 判断一个属性是否是undefined,
枚举属性
删除属性
- delete 运算符可以删除对象的属性,
- delete 只是断开属性和宿主对象的联系而不会去操作属性中的属性
- delete 只能删除自有属性,不能删除继承属性,(要删除继承属性必须从定义这个属性的原型对象上删除他,而且这会影响到所有继承自这个原型的对象)
- 返回值待讨论,P128
属性特性(propertity attribute)
可写 (writable attribute)
可枚举(enumerable attribute)
可配置(configurable attribute)
自有属性
- 直接在对象中定义的属性,可以用对象的hasOwnProperty()来检测给定的名字是否是对象的自有属性。
继承属性
- 是在对象的原型对象中定义的属性
- 当查询某个属性时,会先查询自有属性,如果没有,继续在其原型对象中查询,如果没有,且此原型对象还有原型,则继续查询,指导找到这个属性,或者查找到一个原型是null的对象为止。对象的原型属性构成了一个链。
值
名
属性的查询和设置
对象特性(object attribute)
对象的扩展标记
指明是否可以向该对象添加新属性(ECMAScript 5)
对象的类
标识对象类型的字符串
对象的原型
指向另一个对象,本对象的属性继承自它的原型对象。
宿主对象
- 是JS解释器所嵌入的宿主环境定义的。
自定义对象
- 运行中JS代码创建的对象。
内置对象
* 是ECMAScript规范定义的对象或类。
创建对象
对象直接量
- 由若干名/值对组成的映射表,名/值对中用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来。
var book={
"main title":"JS",
"sub-title":"",
author:{
firstname:"D",
secongname:"F"
}
};
new
- 使用new运算符创建并初始化一个新对象,关键字new 后跟随一个函数调用。这个函数调用就是构造函数。
- JS 语言核心中的原始类型都包含内置构造函数。
原型
- 每一个JS对象(除null外)都和另一个对象相关联,这个对象就是原型,每一个对象都从原型继承属性。
- 所有通过对象直接量创建的对象都具有同一个原型对象,并可以通过JS代码Object.prototype获得对原型对象的引用。
- 通过关键字 new 和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。
- Object.property没有原型对象。不继承任何属性,
Object.create()
- 是一个静态函数,须传入所需的原型对象。也可以是一个null,表示创建没有原型的新对象。