MST

星途 面试题库

面试题:JavaScript代理对象在设计模式中的应用

假设你正在开发一个模块,需要实现对象访问控制的功能,利用JavaScript代理对象设计一个可以控制对特定对象属性的读写权限的方案,详细阐述设计思路并给出关键代码实现。
14.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 创建代理对象:使用Proxy构造函数创建一个代理,该代理会拦截对目标对象的各种操作。
  2. 定义权限规则:可以通过一个配置对象来定义不同属性的读写权限。
  3. 拦截操作并检查权限:在代理的getset陷阱中,根据权限规则来决定是否允许对属性的读写操作。

关键代码实现

// 目标对象
const target = {
  name: 'John',
  age: 30
};

// 权限配置
const permissions = {
  name: { read: true, write: true },
  age: { read: true, write: false }
};

const proxy = new Proxy(target, {
  get(target, property) {
    if (permissions[property] && permissions[property].read) {
      return target[property];
    }
    throw new Error(`没有读取 ${property} 的权限`);
  },
  set(target, property, value) {
    if (permissions[property] && permissions[property].write) {
      target[property] = value;
      return true;
    }
    throw new Error(`没有写入 ${property} 的权限`);
  }
});

// 测试读取操作
console.log(proxy.name); 
// console.log(proxy.age); 
// 测试写入操作
proxy.name = 'Jane'; 
// proxy.age = 31;