Chapter6 对象

原型式继承  prototypal inheritance

除了字符串、数字、true、false、null和undefined之外,JavaScript中的值都是对象。

属性特性:可写,可枚举,可配置

三类JavaScript对象和两类属性

内置对象

宿主对象

自定义对象

自有属性

继承属性

 

6.1 创建对象

 

  1. 对象直接量
  2. 通过new创建对象
  3. 原型
  4. Object.create()
     function inherit(p){
if(p==null) throw TypeError();
if(Object.create)
return Object.create(p);
var t=typeof t;
if(t !== "object" && t !== "function") throw TypeError();
function f(){};
f.prototype  = p;
return new f();
 }
 
6.2 属性的查询和设置
使用点(.)和方括号([])访问属性。
  1. 作为关联数组的对象
类属性类似于名值对,和普通hashmap差不多。
  1. 继承
  2. 属性访问错误
访问不存在的属性,返回undefined。访问不存在的对象的属性,TypeError。
null 和 undefined不能操作属性。
 
6.3 删除属性
delete book.author;
delete不能只能删除自有属性,不能删除继承属性。
delete不能删除那些可配置属性为false的属性。
 
6.4 检测属性
in运算符,hasOwnProperty()和propertyIsEnumerable()
 
6.5 枚举属性
for/in循环
 
6.6属性getter和setter
这个还是挺新奇的玩意,类似java的get和set方法,但是不需要在额外申明变量了,或者说不能再声明了。
 
6.7属性的特性
一个数据属性包含一个名字和四个特性:他的值(value)、可写性(writable)、可枚举性(enumerable)和可配置性(configurable)。
存取器属性不具有值(value)特性和可写性,它们的可写性是由setter方法存在与否决定的。
Object.getOwnPropertyDescriptor()
Object.defineProperty()
 
6..8对象的三个属性
1.原型属性
Object.getPrototypeOf()
isPrototypeOf()
2.类属性
toString()---->[object class]
3.可扩展性
是否可以给对象添加新属性。
Object.esExtensible(); == Object.isSealed();
Object.preventExtensible() == Object.seal();
Object.freeze();   <--> Object.isFrozen();
 
6.9序列化对象
将对象的状态转换为字符串,也可还原。
JSON.stringify()  <--> JSON.parse();
 
6.10对象方法
所有的JavaScript对象都从Object.prototype继承属性,这些继承属性主要是方法。
1.toString()方法
2.toLocalString()
3.toJSON()
4.valueOf()