问题:How and why does ‘a’[’toUpperCase’]() in JavaScript work?
在 javascript 中,总有让我感到惊奇的地方。我刚刚又遇到了一些代码,并做了简单的调试:
alert('a'['toUpperCase']()); // alerts 'A'
虽然现在我知道了 toUpperCase()
是字符串类型的一个方法,但是最初我却没有意识到这一点。
然而,
- 因为
toUpperCase
是a
的一个方法?还是有其它的含义。 这段代码 的全文如下:
function callMethod(method) { return function (obj) { return obj[method](); //** 我如何能确定 method 一定是 obj 的一个成员函数 ** } } var caps2 = map(['a', 'b', 'c'], callMethod('toUpperCase')); // ['A','B','C'] // 此处忽略了 map 函数的实现细节 // 一次取出数组的每个元素,并调用特定的函数(此例中是 toUpperCase)
此处定义的是一个通用函数,可以调用任何对象的任何方法。但这是否隐式的意味着这样一个事实,此对象已经含有调用的方法?
我承认我对 javascript 的基本概念上的理解有些不足,不过还是希望在此可以得到帮助。
回答:http://stackoverflow.com/a/15659923/343194
将语句拆开:
.toUpperCase()
是String.prototype
的一个函数。'a'
是一个原始类型,在这段代码中会被转换成对象类型。- 我们有两种方式可以调用对象的函数和属性,点语法和中括号语法
因此
'a'['toUpperCase'];
此处使用了中括号语法来调用 String.prototype
上的 toUpperCase
属性,因为这个属性是一个函数,我们就可以使用 ()
来执行这个函数。
'a'['toUpperCase']();