MST
星途 面试题库

面试题:JavaScript 装饰器模式在类方法中的深度应用与优化

给定一个 JavaScript 类 `class MathOperations { add(a, b) { return a + b; } subtract(a, b) { return a - b; } }`,使用装饰器模式为该类的所有方法添加权限验证功能。假设权限验证逻辑是通过调用另一个异步函数 `async function checkPermission() { // 模拟异步验证逻辑,这里简单返回 true 表示有权限 return true; }` 来实现,如果验证通过则执行原方法,否则抛出权限不足的错误。同时,优化装饰器的实现,使其在性能和可维护性上达到较高标准,避免重复代码和不必要的性能开销。请完整地用 JavaScript 实现上述需求。
41.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
async function checkPermission() {
    // 模拟异步验证逻辑,这里简单返回 true 表示有权限
    return true;
}

function withPermission(target, propertyKey, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = async function(...args) {
        const hasPermission = await checkPermission();
        if (hasPermission) {
            return originalMethod.apply(this, args);
        } else {
            throw new Error('权限不足');
        }
    };
    return descriptor;
}

class MathOperations {
    @withPermission
    add(a, b) {
        return a + b;
    }

    @withPermission
    subtract(a, b) {
        return a - b;
    }
}