2015-02-07 119 views
1

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

+0

'[]'应用于函数调用的结果。 – thefourtheye 2015-02-07 20:04:47

回答

3

这是用于访问对象属性的bracket notation。在你的情况下,buf.toString()是一个字符串。所有字符串都有一堆来自String.prototype的属性,如toUpperCasetoLowerCase。通常你用点符号读取这些属性:

buf.toString().toUpperCase(); 

但是你总是可以使用括号语法。以上相当于

buf.toString()['toUpperCase'](); 

在你的情况中,括号表示法对条件属性名称非常有用,因为括号内可以有一个表达式。

可能你在[]之后被圆括号弄糊涂了。但很容易理解:String.prototype.toUpperCase属性是一个函数,因此您拥有使用()运算符调用此函数的所有合法权利。这里没有魔法。

+0

谢谢,这很清楚。我不知道为什么我看不到。我不会调用这样的核心方法,只是走错了方向。 很酷,谢谢.. – csduarte 2015-02-07 20:12:22

1

您正在寻找的术语是Property Accessor。在这种情况下,您正在查看括号记号

您可以使用[]运算符来访问JavaScript对象的各种属性。这些属性包括可以调用的函数。

object["functionName"]() 

人们可以想到的对象作为一个关联数组(也称为地图,字典,散列查找表)的。此数组中的键是对象属性的名称。当谈到对象的属性以区分属性和方法时,这是很典型的。然而,财产/方法的区别只不过是一种惯例。方法只是一个可以调用的属性,例如,如果它具有对Function实例的引用作为其值。