JavaScript ES5 对象方法
ECMAScript 5 (2009) 向 JavaScript 添加了许多新的对象方法。
管理对象
// 以现有对象为原型创建对象 Object.create() //添加或更改对象属性 Object.defineProperty(object, property, descriptor) //添加或更改对象属性 Object.defineProperties(object, descriptors) //访问属性 Object.getOwnPropertyNames(object) //以数组返回所有属性 Object.getOwnPropertyNames(object) //访问原型 Object.getPrototypeOf(object) //以数组返回可枚举属性 Object.keys(object)
保护对象
//防止向对象添加属性 Object.preventExtensions(object) //如果属性可以添加到对象,则返回true Object.isExtensible(object) //防止更改对象属性(不是值) Object.seal(object) //如果对象被密封,则返回true Object.freeze(object) //如果对象被冻结,则返回true Object.isFrozen(object)
更改属性值
const person = { firstName: "Bill", lastName: "Gates", language: "EN" }; //修改属性 Object.defineProperty(person, "language", {value: "NO"}); Object.defineProperty(person, "language", {enumerable: false}); Object.keys(person) //返回可枚举属性的数组 这时就少了language.
更改元数据
ES5允许更改一下属性元数据:
writable: true // 属性值可更改 or false 不更改
enumerable: true //属性可枚举or false 不更改
configurable: true //属性可重新配置 or false 不更改
一个计数器实例:
//定义对象 const obj = {counter:0}; //定义setter Object.defineProperty(obj, "reset", { get: function(){ this.counter = 0; } }); Object.defineProperty(obj, "increment", { get: function(){ this.counter++; } }); Object.defineProperty(obj, "decrement", { get: function(){ this.counter--; } }); Object.defineProperty(obj, "add", { set: function(value){ this.counter += value; } }); Object.defineProperty(obj, "subtract", { set: function(value){ this.counter -= i; } }); //操作计算器 obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement;