一、Object.create()
Object.create()
方法可以用于创建一个新对象,新对象的原型指向指定对象。具体来说,该方法接收参数:Object.create(proto, [propertiesObject])
,其中 proto
表示新对象的原型,propertiesObject
表示对象的属性,是可选参数。
示例代码:
const parent = {
name: "Parent",
printName() {
console.log(this.name);
}
};
const child = Object.create(parent);
child.name = "Child";
child.printName(); // Child
上述示例中,通过 Object.create()
方法创建了一个新对象 child
,child
的原型指向 parent
。子对象可以覆盖父对象的属性和方法,如代码中的 name
属性。通过 child.printName()
方法调用,输出的是 child
对象的 name
属性。
二、Object.defineProperty()
Object.defineProperty()
方法可以用于在对象上定义一个新属性或修改已有属性的特性。具体来说,该方法接收参数:Object.defineProperty(obj, prop, descriptor)
,其中 obj
表示要定义属性的对象,prop
表示要定义的属性名,descriptor
表示属性的描述符,是一个对象。
示例代码:
const obj = {};
Object.defineProperty(obj, "name", {
value: "Alice",
writable: false,
enumerable: true,
configurable: true
});
console.log(obj.name); // Alice
obj.name = "Bob"; // 尝试修改name属性
console.log(obj.name); // Alice,因为writable为false
上述示例中,通过 Object.defineProperty()
方法在 obj
对象上定义了一个 name
属性,value
表示属性值为 "Alice",writable
表示属性不可修改(即只读),enumerable
表示属性可枚举,configurable
表示属性可被删除或重新设置特性。
三、Object.defineProperties()
Object.defineProperties()
方法与 Object.defineProperty()
类似,但可以定义多个属性。具体来说,该方法接收参数:Object.defineProperties(obj, props)
,其中 obj
表示要定义属性的对象,props
表示要定义的属性,是一个对象。
示例代码:
const obj = {};
Object.defineProperties(obj, {
name: {
value: "Alice",
writable: false,
enumerable: true,
configurable: true
},
age: {
value: 25,
writable: true,
enumerable: true,
configurable: true
}
});
console.log(obj.name); // Alice
obj.name = "Bob"; // 尝试修改name属性
console.log(obj.name); // Alice,因为writable为false
console.log(obj.age); // 25
obj.age = 30; // 尝试修改age属性
console.log(obj.age); // 30,由于writable为true,属性可以修改
上述示例中,通过 Object.defineProperties()
方法在 obj
对象上一次性定义了两个属性 name
和 age
,name
属性是只读的,age
属性是可读写的。
四、Object.getOwnPropertyDescriptors()
Object.getOwnPropertyDescriptors()
方法可以获取一个对象的所有自身属性的描述符。具体来说,该方法接收参数:Object.getOwnPropertyDescriptors(obj)
,其中 obj
表示要获取属性描述符的对象。
示例代码:
const obj = {
name: {
value: "Alice",
writable: false
},
age: {
value: 25,
writable: true
}
};
const descriptors = Object.getOwnPropertyDescriptors(obj);
console.log(descriptors);
上述示例中,通过 Object.getOwnPropertyDescriptors()
方法获取了 obj
对象的所有自身属性的描述符,并将结果输出到控制台。
五、Object.freeze()
Object.freeze()
方法可以冻结一个对象,使其属性不可修改、删除或添加。具体来说,该方法接收参数:Object.freeze(obj)
,其中 obj
表示要冻结的对象。
示例代码:
const obj = {
name: "Alice",
age: 25
};
Object.freeze(obj);
obj.name = "Bob"; // 尝试修改name属性
obj.gender = "female"; // 尝试添加gender属性
delete obj.age; // 尝试删除age属性
console.log(obj); // 输出{ name: 'Alice', age: 25 }
上述示例中,通过 Object.freeze()
方法冻结了 obj
对象,使其属性不可修改、删除或添加。尝试修改、添加或删除对象的属性均会被忽略。