跳至主要內容

2690. 无穷方法对象 🔒


2690. 无穷方法对象 🔒open in new window

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

Write a function that returns an infinite-method object.

An infinite-method object is defined as an object that allows you to call any method and it will always return the name of the method.

For example, if you execute obj.abc123(), it will return "abc123".

Example 1:

Input: method = "abc123"

Output: "abc123"

Explanation:

const obj = createInfiniteObject();

obj'abc123'; // "abc123"

The returned string should always match the method name.

Example 2:

Input: method = ".-qw73n|^2It"

Output: ".-qw73n|^2It"

Explanation: The returned string should always match the method name.

Constraints:

  • 0 <= method.length <= 1000

题目大意

请你编写一个函数,返回一个 无穷方法对象

无穷方法对象 被定义为一个对象,它允许您调用任何方法,并始终返回方法的名称。

例如,如果执行 obj.abc123() ,它将返回 "abc123"

示例 1:

输入: method = "abc123"

输出: "abc123"

解释:

const obj = createInfiniteObject();

obj'abc123'; // "abc123"

返回的字符串应始终与方法名称匹配。

示例 2:

输入: method = ".-qw73n|^2It"

输出: ".-qw73n|^2It"

解释: 返回的字符串应始终与方法名称匹配。

提示:

  • 0 <= method.length <= 1000

解题思路

要实现一个无穷方法对象,可以利用 JavaScript 的 Proxy 特性来动态捕获方法调用并返回方法名称,通过 Proxyget 捕获器,能够拦截对对象属性的访问。

例如,当调用 obj.abc123() 时,prop 会被捕获为 "abc123",并返回一个函数,该函数返回 "abc123"

  1. 创建一个代理对象:使用 Proxy 对象来拦截方法调用。

  2. 定义一个处理器:在处理器中,实现 get 方法来捕获对属性(方法)的访问。

  3. 返回一个函数:当访问到一个属性时,返回一个新的函数,该函数返回属性名称。

  4. 实现无穷调用:由于使用了代理,对象的每一个属性访问都会返回对应的函数,允许无限链式调用。

代码

var createInfiniteObject = function () {
	return new Proxy(
		{},
		{
			get: (target, prop) => {
				// 返回一个新函数,函数返回方法名称
				return () => String(prop);
			}
		}
	);
};

相关题目

题号标题题解标签难度
2691不可变辅助工具 🔒open in new window[✓]
2692使对象不可变 🔒open in new window[✓]