Skip to content

LeetCode题解:2690. 无穷方法对象,Proxy #492

@leechen298

Description

@leechen298

Problem: 2690. 无穷方法对象


思路

这个问题的核心在于创建一个对象,该对象能够响应对其任何方法的调用,并返回调用的方法名称。为了实现这一点,我们可以利用 JavaScript 中的 Proxy 对象。Proxy 对象允许我们自定义对象的基本操作,例如属性读取、设置等。在这个场景中,我们将使用 Proxy 来拦截对任何方法的调用,并返回一个函数,这个函数简单地返回被调用方法的名称。

解题方法

我们将定义一个函数 createInfiniteObject,该函数返回一个 Proxy 对象。这个 Proxy 对象的 get 拦截器会拦截所有属性的读取操作。对于每个被读取的属性(在这个场景中是方法名),get 拦截器返回一个新的函数。当这个函数被调用时,它返回原始属性(方法)的名称。

复杂度

时间复杂度: $O(1)$

  • 每次方法调用的处理时间是常数级别的,因为我们只是返回一个函数,然后这个函数返回方法名。

空间复杂度: $O(1)$

  • 我们只创建了一个 Proxy 对象,不管调用多少次方法,空间复杂度保持不变。

Code

/**
 * @return {Object}
 */
var createInfiniteObject = function() {
  // 使用 Proxy 创建一个无穷方法对象
  return new Proxy({}, {
    get(target, prop, receiver) {
      // 拦截对象属性的读取
      // 返回一个函数,该函数返回被调用的方法名称
      return () => prop;
    }
  });
};

在这段代码中,createInfiniteObject 函数返回一个 Proxy 对象,该对象的 get 方法被用来拦截对任何方法的调用,并返回一个函数。这个返回的函数在被调用时,会返回方法的名称。因此,当你调用 obj.abc123() 时,它返回 "abc123",这是因为 abc123 是被调用的方法名称。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions