MST
星途 面试题库

面试题:JavaScript中如何检测对象的可扩展能力并进行简单兼容性处理

在JavaScript中,描述如何使用`Object.isExtensible`方法检测对象的可扩展能力。假设你需要在不同浏览器环境下确保代码兼容性,若浏览器不支持该方法,你会如何模拟实现这个检测功能?
47.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

使用Object.isExtensible检测对象可扩展能力

在JavaScript中,Object.isExtensible方法用于判断一个对象是否是可扩展的(即是否可以添加新的属性)。语法如下:

const obj = {name: 'John'};
const isExtensible = Object.isExtensible(obj);
console.log(isExtensible); 

上述代码直接调用Object.isExtensible方法传入要检测的对象,返回true表示对象可扩展,false表示不可扩展。

模拟实现Object.isExtensible以兼容不同浏览器

当浏览器不支持Object.isExtensible方法时,可以通过以下方式模拟实现:

if (typeof Object.isExtensible!== 'function') {
    Object.isExtensible = function (obj) {
        if (typeof obj!=='object' || obj === null) {
            throw new TypeError('The first argument must be an object');
        }
        const originalIsExtensible = Object.defineProperty(obj, '__proto__', {
            value: null,
            writable: true,
            enumerable: false,
            configurable: true
        });
        Object.defineProperty(obj, '__proto__', originalIsExtensible);
        return originalIsExtensible.configurable;
    };
}

这段代码首先检查Object.isExtensible是否存在,如果不存在则定义一个模拟方法。该方法尝试通过操作对象的__proto__属性来判断对象是否可扩展。如果能成功定义__proto__属性,并且其configurabletrue,则说明对象是可扩展的。最后恢复__proto__属性原来的定义。