面试题答案
一键面试- 设置对象为不可扩展的方法:
在JavaScript中,可以使用
Object.preventExtensions()
方法来设置一个对象为不可扩展。一旦一个对象被设置为不可扩展,就不能再为它添加新的属性。 - 代码示例:
// 创建一个普通对象
let myObject = {name: 'John'};
// 设置对象为不可扩展
Object.preventExtensions(myObject);
// 尝试添加新属性
myObject.age = 30;
// 打印对象,会发现没有成功添加age属性
console.log(myObject);
- 设置后对对象产生的限制:
- 不能添加新属性:如上述代码中,尝试为不可扩展的
myObject
添加age
属性,操作不会成功。 - 属性描述符和原型的限制:虽然不能添加新属性,但现有属性的描述符(如
configurable
、enumerable
、writable
等)和对象原型仍然可以修改,除非将属性描述符设置为configurable: false
,或者将对象的原型设置为null
。例如:
- 不能添加新属性:如上述代码中,尝试为不可扩展的
let obj = {a: 1};
Object.preventExtensions(obj);
// 现有属性描述符可修改
Object.defineProperty(obj, 'a', {writable: false});
console.log(obj.a);
// 可以修改原型
obj.__proto__ = {b: 2};
console.log(obj.b);
如果想完全冻结对象(包括防止修改属性描述符和原型),可以使用Object.freeze()
方法。
let frozenObj = {c: 3};
Object.freeze(frozenObj);
// 尝试修改属性描述符
Object.defineProperty(frozenObj, 'c', {writable: false});
// 尝试修改原型
frozenObj.__proto__ = {d: 4};
console.log(frozenObj);
在上述代码中,对冻结对象的属性描述符修改和原型修改都不会生效。