为什么在 javascript 中 'a'['toUpperCase']() 也是正确的?(翻译100%)
发布在stackoverflow 热门 javascript 问答2013年12月9日view:4167
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

问题How and why does ‘a’[’toUpperCase’]() in JavaScript work?

在 javascript 中,总有让我感到惊奇的地方。我刚刚又遇到了一些代码,并做了简单的调试:

alert('a'['toUpperCase']());  // alerts 'A'

虽然现在我知道了 toUpperCase() 是字符串类型的一个方法,但是最初我却没有意识到这一点。


然而,

  • 因为 toUpperCasea 的一个方法?还是有其它的含义。
  • 这段代码 的全文如下:

    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']();
评论
发表评论
暂无评论
WRITTEN BY
justjavac(迷渡)
☑辍学生 ☑极客 ☑码农 正在出版「代码之谜」,正在翻译「Javascript Quirks」。 http://justjavac.com
TA的新浪微博
PUBLISHED IN
stackoverflow 热门 javascript 问答

翻译 stackoverflow 上面的热门 javascript 问答。

友情链接 大搜车前端团队博客
我的收藏