当Object 被做为工具方法,而不是构造方法时,数组
Object(arg):包装方法,将非对象类型包装成一个对象函数
Object.create(proto[, propertiesObject]):工具
Object.getPrototypeOf(obj):性能
必须区分“构造函数的方法”和“实例对象的方法”。this
valueOf():返回当前对象对应的值。双向绑定
toString():返回当前对象对应的字符串形式。
这个方法颇有用,能够用于判断对象类型code
toLocalString():返回当前对象对应的本地字符串形式。对象
hasOwnProperty():判断某个属性是否为当前对象自身的属性,仍是继承自原型对象的属性。继承
isPrototypeOf():判断当前对象是否为另外一个对象的原型。ip
propertyIsEnumerable():判断某个属性是否可枚举。
Object.getOwnPropertyDescriptor():获取对象的属性的精确描述模型
Object.defineProperty()
Object.defineProperties()
这两个方法有性能损耗,会拖慢执行速度,不宜大量使用。
若是一个属性的enumerable为false,下面三个操做不会取到该属性。
for..in循环
Object.keys方法
JSON.stringify方法(有时能够利用这一点,为对象添加注释信息。)
所以,enumerable能够用来设置“秘密”属性。
遍历对象属性方法
Object.keys()
Object.getOwnPropertyNames()
通常状况下,几乎老是使用Object.keys方法,遍历数组的属性。
var o ={ $n : 5, get next(){return this.$n++ }, set next(n) { if (n >= this.$n) this.$n = n; else throw "新的值必须大于当前值"; } }; o.next // 5 o.next = 10; o.next // 10
利用存取器,能够实现数据对象与DOM对象的双向绑定。
对于简单属性,就直接拷贝,对于那些经过描述对象设置的属性,则使用Object.defineProperty方法拷贝。
var extend = function (to, from) { var descriptor = Object.getOwnPropertyDescriptor(from, property); if (descriptor && ( !descriptor.writable || !descriptor.configurable || !descriptor.enumerable || descriptor.get || descriptor.set)) { Object.defineProperty(to, property, descriptor); } else { to[property] = from[property]; } }
JavaScript提供了三种方法,精确控制一个对象的读写状态,防止对象被改变。最弱一层的保护是preventExtensions,其次是seal,最强的freeze。
Object.preventExtensions方法能够使得一个对象没法再添加新的属性。能够用delete命令删除它的现有属性。
判断: Object.isExtensible(obj);
Object.seal方法使得一个对象既没法添加新属性,也没法删除旧属性。
判断: Object.isSealed(obj);
Object.freeze方法能够使得一个对象没法添加新属性、没法删除旧属性、也没法改变属性的值,使得这个对象实际上变成了常量。
判断: Object.isFrozen(obj);
局限性: 须要注意的是,使用上面这些方法锁定对象的可写性,可是依然能够经过改变该对象的原型对象,来为它增长属性。