英文:
Why after calling "defineProperties", my object became empty
问题
我有这个对象
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 }",但结果相同。
英文:
I have this object
const product = {
name: "Laptop",
price: 1000,
quantity: 5
};
console.log(product) //{ name: 'Laptop', price: 1000, quantity: 5 }
but then I should to do this:
const descriptors = { enumerable: false, writable: false };
Object.defineProperties(product, {
price: { ...descriptors },
quantity: { ...descriptors },
});
and in console I get this after using defineProperties:
console.log(product) //{ name: 'Laptop' }
My question: Why it's happening?
I expected that the product object will the same but with disables in enumerable and writable only in price and quantity and didn't understand how it works(defineProperties)
Also tried to write it's like "price:{ enumerable: false, writable: false }" the same result
答案1
得分: 1
使用Object.defineProperties()时,你正在定义要修改的对象属性的属性描述符。
将Object.defineProperties()应用于具有价格和数量描述符的产品后,这两个属性都变为不可枚举且只读。因此,当你记录产品对象时,只会显示名称属性,因为它是唯一可枚举的属性。价格和数量属性仍然存在于对象中,但它们不会显示在控制台中,也无法在循环中访问,并且无法直接更改它们的值。
如果尝试直接访问价格和数量属性,你会发现它们仍然存在,但不可写:
console.log(product.price); // 1000
console.log(product.quantity); // 5
英文:
When you use Object.defineProperties(), you are defining the property descriptors for the object properties you want to modify.
After applying Object.defineProperties() to product with the descriptors for price and quantity, both properties become non-enumerable and read-only. As a result, when you log the product object, only the name property is shown because it is the only enumerable property. The price and quantity properties are still present in the object, but they won't show up in the console or be accessible in loops, and you won't be able to change their values directly.
if you try to access the price and quantity properties directly, you'll find that they are still there but are not writable:
console.log(product.price); // 1000
console.log(product.quantity); // 5
答案2
得分: 0
你将enumerable
设置为false。因此,任何尝试枚举键或条目的操作都不会看到它。
英文:
You're setting enumerable
to false. Therefore anything that tries to enumerate keys or entries won't see it.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论