什么是编码技术?功能[]()

时间:2015-02-07 20:03:33

标签: javascript

我正在做一些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中看过类似的东西,如果它们是最后一个参数则传递闭包。我假设它是相同的,但在谷歌上找不到它因为我不知道这些词。 甚至没有关闭

2 个答案:

答案 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实例的引用作为其值。