s-h*_*ter 3 javascript function square-bracket node.js ecmascript-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');
Run Code Online (Sandbox Code Playgroud)
上面的程序将打印出来
Performing action one
Performing action two
Performing action three
Run Code Online (Sandbox Code Playgroud)
在Node.js/Javascript中是否有这种类型的函数声明的技术名称?
这一行如何将所有这些(通过使用带有字符串常量的方括号声明的函数)放入FunMap对象的属性函数中?
const map = this;
Run Code Online (Sandbox Code Playgroud)
[]javascript类中的方括号表示法是否引用了类本身?
类中带方括号的语法称为计算属性名称.计算方括号内的表达式,并将结果的字符串值用作键.
方括号内的代码无法访问类本身,因为它在类声明之前进行了求值.
您的示例创建了一个如下所示的类:
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 Code Online (Sandbox Code Playgroud)
该run函数以不同的方式使用方括号 - 按名称查找属性.该行const map = this没有做任何特殊的事情 - 该函数会做同样的事情:
run(action) {
return this[action]();
}
Run Code Online (Sandbox Code Playgroud)
this[action]意思是"得到叫物业action的this".然后将该值称为不带参数的函数.
ES2015中添加了计算属性名称.通过名称获取对象的下标语法从一开始就是JavaScript的一部分.