You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建支持方括号传参且可赋值的函数?

实现链式方括号赋值的结构

你要的myFunction[3][5] = "stackoverflow"这种写法,本质不是普通函数调用,而是让一个对象支持链式方括号访问+赋值的行为。下面以JavaScript为例,提供两种可行的实现方式:

方案1:使用Proxy代理(推荐)

Proxy可以拦截对象的属性访问和赋值操作,完美适配需求:

const myFunction = new Proxy({}, {
  get(target, param1) {
    // 第一次访问[param1]时,返回处理第二个参数的代理
    return new Proxy({}, {
      get(innerTarget, param2) {
        // 读取操作返回存储的值
        return target[`${param1}-${param2}`];
      },
      set(innerTarget, param2, param3) {
        // 赋值操作存储三个参数的关联关系
        target[`${param1}-${param2}`] = param3;
        return true; // 标记赋值成功
      }
    });
  }
});

// 测试
myFunction[3][5] = "stackoverflow";
console.log(myFunction[3][5]); // 输出 "stackoverflow"

方案2:自定义类实现

如果不想用Proxy,也可以通过自定义类的属性访问逻辑实现:

class DoubleKeyStore {
  constructor() {
    this.storage = {};
  }

  get(param1) {
    const self = this;
    return {
      __defineGetter__(param2) {
        return self.storage[`${param1}-${param2}`];
      },
      __defineSetter__(param2, value) {
        self.storage[`${param1}-${param2}`] = value;
      }
    };
  }
}

// 实例化使用
const myFunction = new DoubleKeyStore();
myFunction[3][5] = "stackoverflow";
console.log(myFunction[3][5]); // 输出 "stackoverflow"

核心逻辑说明

  • 这里的myFunction是一个支持链式属性访问的对象,而非传统函数
  • 第一次方括号访问[param1]时,返回一个中间对象;这个中间对象会监听第二次方括号访问[param2]的赋值/读取操作,最终把三个参数关联存储到内部容器中
  • 两种方案都支持读取操作(比如const val = myFunction[3][5])

内容的提问来源于stack exchange,提问作者user10825637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:01:13