第六章 对象
对象是js的基本数据类型
是一种复合值
js对象是动态的,属性可以新增和删除
声明变量时,是通过引用来指向该对象的
属性特性
- 可写,是否可以设置该属性的值
- 可枚举,是否可通过for/in循环返回该属性
- 可配置,是否可以删除或修改该属性
对象特性
- 对象的原型指向另外一个对象,本对象的属性继承自它的原型对象
- 对象的类是一个标识对象类型的字符串
- 对象的扩展标记,是否可以向该对象添加新属性
三类js对象和两类属性
- 内置对象:js规范定义的对象或类.数组、函数、日期等
- 宿主对象,:js所嵌入的宿主环境.客户端js中表示网页结构的htmlelement对象都是宿主对象
- 自定义对象
- 自有属性
- 继承属性
创建对象
通过new 运算符创建对象
new 后跟随一个函数调用,这个函数使用的构造函数
原型
每一个js对象都有一个原型相关联
每一个对象都从原型继承属性
所有通过对象直接量创建的对象都具有同一个原型对象
可以通过Object.prototype 获得对原型对象的引用
有点类似责任链的设计模式
访问的属性不存在的时候 //undefined 没有length属性
属性检测
- in
- hasOwnProperty // 检测是否是对象的自有属性
- propertyIsEnumerable //自有属性且这个属性的可枚举性为true时它才返回true
for (p in o ){
if(!o.hasOwnProperty(p))
continue; // 跳过继承的属性
for(p in o){
if (type o[p] === "function")
continue; // 跳过方法
}
}
属性getter和setter
-
存取器属性: 不可写
-
数据属性 : 只有一个简单的值
-
getOwnPropertyDescriptor 可以获得某个对象特定属性的描述
- value
- writable
- enumerable
- configurable