2690. 无穷方法对象 🔒
2690. 无穷方法对象 🔒
题目
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
特性来动态捕获方法调用并返回方法名称,通过 Proxy
的 get
捕获器,能够拦截对对象属性的访问。
例如,当调用 obj.abc123()
时,prop
会被捕获为 "abc123"
,并返回一个函数,该函数返回 "abc123"
。
创建一个代理对象:使用
Proxy
对象来拦截方法调用。定义一个处理器:在处理器中,实现
get
方法来捕获对属性(方法)的访问。返回一个函数:当访问到一个属性时,返回一个新的函数,该函数返回属性名称。
实现无穷调用:由于使用了代理,对象的每一个属性访问都会返回对应的函数,允许无限链式调用。
代码
var createInfiniteObject = function () {
return new Proxy(
{},
{
get: (target, prop) => {
// 返回一个新函数,函数返回方法名称
return () => String(prop);
}
}
);
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
2691 | 不可变辅助工具 🔒 | [✓] | 🔴 | 🀄️ 🔗 | |
2692 | 使对象不可变 🔒 | [✓] | 🟠 | 🀄️ 🔗 |