我有这个东西
const product = {
name: "Laptop",
price: 1000,
quantity: 5
};
console.log(product) //{ name: 'Laptop', price: 1000, quantity: 5 }
但是我应该这样做:
const descriptors = { enumerable: false, writable: false };
Object.defineProperties(product, {
price: { ...descriptors },
quantity: { ...descriptors },
});
在控制台中,我在使用defineProperties后得到了这个:
console.log(product) //{ name: 'Laptop' }
我的问题:为什么会发生这种情况?
我预计产品对象将是相同的,但仅在价格和数量上禁用可枚举和可写,并且不理解它是如何工作的(defineProperties) 还尝试写成像“price:{ enumerable: false, writable: false }”一样的结果
当您使用 Object.defineProperties() 时,您正在为要修改的对象属性定义属性描述符。
将 Object.defineProperties() 应用于具有价格和数量描述符的产品后,这两个属性都变为不可枚举和只读。因此,当您记录产品对象时,仅显示 name 属性,因为它是唯一的可枚举属性。价格和数量属性仍然存在于对象中,但它们不会显示在控制台中或可在循环中访问,并且您将无法直接更改它们的值。
如果您尝试直接访问价格和数量属性,您会发现它们仍然存在,但不可写:
console.log(product.price); // 1000
console.log(product.quantity); // 5
您将
enumerable
设置为 false。因此,任何试图枚举键或条目的东西都不会看到它。