Profile avatar

鱼翅

同歌性歌颂,同歌性发原

最近更新

本站由 yuchiXiong 使用 Stellar 1.29.1 主题创建。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

五彩斑斓的黑? 喷一喷单色黑与四色黑2024 年,我终于用上 rem 了......吐槽一下: 还得是拓展坞懂视频接口暗话 JavaScript 函数式: add(3)(4)一点都不酷前端条件竞态乱谈——可能被我误解的函数防抖数据结构其二 并查集数据结构其一 线性表JavaScript 元编程——基于 Proxy 实现 active_record 动态查找从 Rails 视角看现代前端——换一种方式实现 SPA在 Rails 中接入微信支付指北
主页/JavaScript 高级程序设计
2021-10-03
1897 次阅读

JavaScript 元编程——基于 Proxy 实现 active_record 动态查找

JavaScript元编程Proxy设计模式

什么是元编程?

元编程是指编写能够生成或操作其他程序的程序,或者在运行时修改自身行为的程序。在JavaScript中,我们可以使用Proxy、Reflect等API来实现元编程。

使用Proxy实现动态方法


class Model {
  constructor(attributes = {}) {
    this.attributes = attributes;
  }
  
  static findBy(handler) {
    return new Proxy(this, {
      get(target, prop) {
        if (prop.startsWith('findBy')) {
          const field = prop.slice(6).toLowerCase();
          return function(value) {
            // 模拟数据库查询
            return handler(field, value);
          }
        }
        return target[prop];
      }
    });
  }
}

// 使用示例
const User = Model.findBy((field, value) => {
  console.log(`Finding user by ${field} = ${value}`);
  return { id: 1, name: 'John', email: 'john@example.com' };
});

const user = User.findByEmail('john@example.com');
// 输出: Finding user by email = john@example.com
      

与Rails的对比

在Rails中,ActiveRecord提供了类似的动态查找功能:


# Ruby on Rails
user = User.find_by_email('john@example.com')
      

通过JavaScript的Proxy,我们可以在前端实现类似的API风格。

许可协议

本文采用 署名-非商业性使用-相同方式共享 4.0 国际 许可协议,转载请注明出处。

较旧文章
从 Rails 视角看现代前端——换一种方式实现 SPA
数据结构其一 线性表
较新文章