我正在做一些javascript练习,我解决了。但在另一个解决方案中我看到了......
this.queue(
buf.toString()[
nlines++ % 2 === 0? 'toUpperCase' : 'toLowerCase']() + '\n');
我在哪里这样做......
var line = buf.toString();
this.queue(lineCount % 2 === 0
? line.toLowerCase() + '\n'
: line.toUpperCase() + '\n'
);
在函数之后传入[],该技术称为什么?
我在swift中看过类似的东西,如果它们是最后一个参数则传递闭包。我假设它是相同的,但在谷歌上找不到它因为我不知道这些词。 甚至没有关闭
答案 0 :(得分:3)
这是bracket notation用于访问对象属性。在您的情况下,buf.toString()
是一个字符串。所有字符串都有来自String.prototype
的{{1}}和toUpperCase
的一堆属性。通常您使用点符号来读取这些属性:
toLowerCase
但是你也总是可以使用括号语法。以上相当于
buf.toString().toUpperCase();
在你的情况下,括号表示法对于条件属性名称非常方便,因为括号之间可以有一个表达式。
在buf.toString()['toUpperCase']();
之后,你可能会对括号感到困惑。但它很容易理解:[]
属性是一个函数,因此您拥有使用String.prototype.toUpperCase
运算符调用此函数的所有合法权限。这里没有魔力。
答案 1 :(得分:1)
您正在寻找的术语是Property Accessor。在这种情况下,您正在查看括号表示法。
您可以使用[]
运算符访问JavaScript对象的各种属性。这些属性包括可以调用的函数。
object["functionName"]()
可以将对象视为关联数组(a.k.a.map,dictionary,hash,lookup table)。此数组中的键是对象属性的名称。在谈论对象的属性时,通常会对属性和方法进行区分。但是,属性/方法的区别仅仅是一个约定。方法只是一个可以调用的属性,例如,如果它有一个对Function实例的引用作为其值。