JavaScript ES5 对象方法
-
JavaScript ES5对象方法
ECMAScript 5为JavaScript添加了许多新的对象方法。// 添加或更改对象属性 Object.defineProperty(object, property, descriptor) // 添加或更改许多对象属性 Object.defineProperties(object, descriptors) // 访问属性 Object.getOwnPropertyDescriptor(object, property) // 将所有属性作为数组返回 Object.getOwnPropertyNames(object) // 将可枚举属性作为数组返回 Object.keys(object) // 访问原型 Object.getPrototypeOf(object) // 阻止向对象添加属性 Object.preventExtensions(object) // 如果可以将属性添加到对象,则返回true Object.isExtensible(object) // 防止更改对象属性(而不是值) Object.seal(object) // 如果对象被密封,则返回true Object.isSealed(object) // 防止对对象进行任何更改 Object.freeze(object) // 如果对象被冻结,则返回true Object.isFrozen(object)
-
改变属性值
语法Object.defineProperty(object, property, {value : value})
此示例更改属性值:
尝试一下var person = { firstName: "John", lastName : "Doe", language : "EN" }; // 改变一个属性 Object.defineProperty(person, "language", {value : "NO"});
-
更改元数据
ES5允许更改以下属性元数据:writable : true // 属性值可以更改 enumerable : true // 属性可以枚举 configurable : true // 属性可以重新配置
writable : false // 属性值无法更改 enumerable : false // 属性不能枚举 configurable : false // 属性无法重新配置
ES5允许更改getter和setter:// 定义一个 getter get: function() { return language } // 定义一个 setter set: function(value) { language = value }
此示例language为只读:Object.defineProperty(person, "language", {writable:false});
此示例language不可枚举:Object.defineProperty(person, "language", {enumerable:false});
-
列出所有属性
此示例列出了对象的所有属性:
尝试一下var person = { firstName: "John", lastName : "Doe" language : "EN" }; Object.defineProperty(person, "language", {enumerable:false}); Object.getOwnPropertyNames(person); // 返回一个属性数组
-
列出可枚举的属性
此示例仅列出对象的可枚举属性:
尝试一下var person = { firstName: "John", lastName : "Doe" language : "EN" }; Object.defineProperty(person, "language", {enumerable:false}); Object.keys(person); // 返回可枚举属性的数组
-
添加属性
此示例向对象添加新属性:
尝试一下// Create an object: var person = { firstName: "John", lastName : "Doe", language : "EN" }; // Add a property Object.defineProperty(person, "year", {value:"2008"});
-
添加Getters和Setter
Object.defineProperty()方法还可用于添加Getters和Setter:
尝试一下//创建一个对象 var person = {firstName:"John", lastName:"Doe"}; // 定义一个 getter Object.defineProperty(person, "fullName", { get : function () {return this.firstName + " " + this.lastName;} });
-
一个反例
尝试一下// 定义 对象 var obj = {counter:0}; // 定义 setters 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 (i) {this.counter -= i;} }); // Play with the counter: obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement;