JavaScript Object 方法
ECMAScript 5 向 JavaScript 添加了许多新的对象方法,包括:添加修改属性、获取属性的元数据、获取属性列表、修改对象配置等。
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)
: 让一个对象不可扩展,也就是不能再添加新的属性Object.isExtensible(object)
: 判断一个对象是否是可扩展的Object.seal(object)
: 封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置Object.isSealed(object)
: 判断一个对象是否被封闭Object.freeze(object)
: 冻结一个对象,一个被冻结的对象再也不能被修改Object.isFrozen(object)
: 判断一个对象是否被冻结
更改属性值
语法:
Object.defineProperty(object, property, { value: newValue });
此示例更改属性值:
const person = {
firstName: "John",
lastName: "Doe",
language: "EN",
};
// Change a property
Object.defineProperty(person, "language", { value: "NO" });
更改属性元数据
ES5 允许更改属性的元数据:属性是否可写,是否可枚举,是否可配置。
writable: true; // 属性值可被修改
writable: false; // 属性值不可被修改
enumerable: true; // 属性值可被枚举
enumerable: false; // 属性值不可被枚举
configurable: true; // 属性值可被配置
configurable: false; // 属性值不可被配置
此示例使 language
成为只读:
Object.defineProperty(person, "language", { writable: false });
这个例子使 language
属性不可枚举:
Object.defineProperty(person, "language", { enumerable: false });
添加属性
Object.defineProperty()
指定的属性名不存在时,就会作为新属性添加到对象中。
此示例向对象添加新属性:
const person = {
firstName: "John",
lastName: "Doe",
language: "EN",
};
// 添加一个属性
Object.defineProperty(person, "year", { value: "2008" });
添加 Getter 和 Setter
Object.defineProperty()
方法还可用于添加访问器属性:
const person = { firstName: "John", lastName: "Doe" };
// 定义一个 getter
Object.defineProperty(person, "fullName", {
get: function () {
return this.firstName + " " + this.lastName;
},
});
列出所有属性
Object.getOwnPropertyNames()
返回一个数组,数组元素是对象的所有属性,包括不可枚举的属性。
这个例子列出了一个对象的所有属性:
const person = {
firstName: "John",
lastName: "Doe",
language: "EN",
};
Object.defineProperty(person, "language", { enumerable: false });
Object.getOwnPropertyNames(person); // 返回一个属性名的数组
列出可枚举的属性
Object.keys()
返回一个数组,数组元素对象的可枚举属性。
此示例仅列出对象的可枚举属性:
const person = {
firstName: "John",
lastName: "Doe",
language: "EN",
};
Object.defineProperty(person, "language", { enumerable: false });
Object.keys(person); // 返回一个可枚举属性名的数组