MST

星途 面试题库

面试题:JavaScript 中如何利用 Object.defineProperty 实现对象可扩展能力的部分控制

在JavaScript中,已知有一个对象`obj = {}`,请使用`Object.defineProperty`方法为`obj`添加一个属性`name`,要求该属性可枚举但不可写,同时说明这种设置如何影响对象的可扩展性。
39.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
let obj = {};
Object.defineProperty(obj, 'name', {
    value: 'defaultName',
    enumerable: true,
    writable: false,
    configurable: true
});

这种设置下,属性name可枚举意味着在使用for...in循环或Object.keys()等方法时,name属性会被包含。不可写意味着不能直接通过obj.name = newName来修改其值。

关于对象的可扩展性,由于configurable默认是false,如果没有显式设置为true,则不能使用delete删除该属性,也不能再次通过Object.defineProperty修改除writablevalue之外的其他特性(如果writablefalsevalue也不能修改)。这在一定程度上限制了对象结构的随意变动,增强了对象属性设置的稳定性。如果configurabletrue,则可以进行上述操作,对象的扩展性相对更高。