【发布时间】:2013-03-17 14:10:34
【问题描述】:
JavaScript 一直让我感到惊讶,这是另一个例子。我刚刚遇到了一些我一开始不理解的代码。于是我调试了一下,得出了这个发现:
alert('a'['toUpperCase']()); //alerts 'A'
现在如果toUpperCase() 被定义为字符串类型的成员,这一定很明显,但最初对我来说没有意义。
不管怎样,
- 因为
toUpperCase是“a”的成员,这是否有效?还是在幕后发生了其他事情? -
我正在阅读的code具有如下功能:
function callMethod(method) { return function (obj) { return obj[method](); //**how can I be sure method will always be a member of obj** } } var caps2 = map(['a', 'b', 'c'], callMethod('toUpperCase')); // ['A','B','C'] // ignoring details of map() function which essentially calls methods on every // element of the array and forms another array of result and returns it在 ANY 对象上调用 ANY 方法是一种通用函数。但这是否意味着指定的方法已经是指定对象的隐式成员?
我确信我对 JavaScript 函数的基本概念缺乏一些认真的理解。请帮助我理解这一点。
【问题讨论】:
-
有两种方法可以访问对象的属性:点表示法和括号表示法。稍微相关:stackoverflow.com/a/11922384/218196。您已经了解括号表示法,因为您在访问数组元素时总是使用它:
arr[5]。如果数字中有有效的标识符名称,您可以使用点表示法:arr.5。 -
和
5['toString']()一样。 -
相关阅读:1)继承与原型链:developer.mozilla.org/en-US/docs/JavaScript/Guide/… 2)JavaScript Primitives的秘密生活:javascriptweblog.wordpress.com/2010/09/27/…
-
初读时我以为标题是“JavaScript 如何以及为什么工作?”嗯嗯。
标签: javascript function