

存在的问题
1.由于所有的实例都是复制了同一个方法所定义的实体,所以效率(内存效率与执行效率低下),可通过原型继承解决
2.无法对属性值进行访问控制(private ,Public)可通过闭包解决
属性访问的运算对象不是变量而是对象的引用
仅读取数值的整数部分的处理
Math[this<0?'celling':'floor'](this);
关联数组
在js中必须通过对象才能实现关联数组
基本操作 通过键取值,元素的设定,元素的删除
作为关联数组应该注意的点
属性的属性
对象的属性 也是有些属性的 
如下表总结了在ECMAScript第五版定义了的属性 ,属性值被定为为值属性
表格1
| 属性的属性名 | 含义 | 
| writable | 可以改写属性的值 | 
| enumerable | 可以通过for in枚举出 | 
| configurable | 可以改变属性的属性,可以删除属性 | 
| get | 可以指定属性值的getter函数 | 
| set | 可以指定属性值的setter函数 | 
不可变对象
即生成之后状态不能再被改变的对象,字符串对象就是典型的不可变对象
灵活运用不可变对象可以提高程序的健壮性,比如在将传递给方法参数时,存在方法对对象内容的改写等
js中可通过以下方式实现不可变对象
1.将属性(状态隐藏藏) ,不提供变更操作(闭包实现)
2.灵活运用ECMAScript第五版提供的函数
3.灵活运用writable,configurable属性以及setter和getter
ECMAScript第五版中用于支持对象不可变的函数 见下表格
| 方法名 | 属性新增 | 属性删除 | 属性值变更 | 确认方法 | 
| preventExtensions | x | o | o | Object.isExtensible | 
| seal | x | x | o | Object.isSealed | 
| freeze | x | x | x | Object.isFrozen | 
Object.preventExtensions例子
需要注意
1.对于以上三种方法一旦更改就无法还原
2.如果想让原型继承中的被继承的方法也不可改变,需要对其进行显示操作 
