如何在Node.js/Javascript中使用方括号声明函数?

6

第一次在Node.js中看到像这样声明函数的东西。

简而言之,代码类似于以下内容:

'use strict';
const Actions = {
  ONE: 'one',
  TWO: 'two',
  THREE: 'three'
};
class FunMap {

  run(action) {
    const map = this;
    map[action]();
  }

  [Actions.ONE] () {
    console.log("Performing action one");
  }

  [Actions.TWO] () {
    console.log("Performing action two");
  }

  [Actions.THREE] () {
    console.log("Performing action three");
  }

}

var funMap = new FunMap();
funMap.run('one');
funMap.run('two');
funMap.run('three');

上述程序将打印
Performing action one
Performing action two
Performing action three

这种在Node.js / Javascript中使用方括号和字符串常量声明的函数有一个技术名称吗?

这行代码如何将所有这些(通过使用方括号和字符串常量声明的函数)放入FunMap对象的属性函数中?

const map = this;

在 JavaScript 类中,方括号符号 [] 是否引用类本身?
1个回答

11

方括号语法在类中被称为计算属性名。方括号内的表达式会被计算,其结果字符串将作为键。

方括号内的代码无法访问类本身,因为它是在类声明之前计算的。

您的示例创建了一个类,像这样:

class FunMap {

  run(action) {
    const map = this;
    map[action]();
  }

  one () {
    console.log("Performing action one");
  }

  two () {
    console.log("Performing action two");
  }

  three () {
    console.log("Performing action three");
  }

}

run 函数使用方括号以不同的方式 - 通过名称查找属性。行 const map = this 并没有做任何特殊的事情 - 该函数将执行与下面相同的操作:

run(action) {
  return this[action]();
}

this[action] 的意思是“获取名为 action 的属性的值,然后将其作为函数调用,不带任何参数。

计算属性名称是在ES2015中添加的。通过对象名称获取对象的下标语法从JavaScript开始就存在。


我可以在[]中放置除字符串常量以外的任何内容吗?我上一个问题的答案是否是否定的?JavaScript类中的方括号表示法[]是否引用该类本身? - s-hunter
你可以在括号中放置任何表达式(尝试 ["f" + 1] () { }),但答案是否定的 - 方括号中的代码会在类定义之前运行。 - joews
括号内的表达式是否需要返回一个字符串? - s-hunter
不会,但是toString方法返回值将被使用。在Node控制台中尝试以下代码:{ [1 + 2]: 3 }{ [{}]: "object" }{ [{ toString() { return "test" } }]: 3 } - joews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接