JavaScript一直让我惊讶,这是另一个例子。我只是遇到了一些我起初不理解的代码。所以我调试了它,得出了这个结论:
alert('a'['toUpperCase']()); //alerts 'A'
现在,如果toUpperCase()
被定义为字符串类型的成员,这一定是显而易见的,但最初对我来说没有意义。
不管怎样,
>
toUpperCase
是“a”的成员而起作用?还是幕后还有别的事
我正在阅读的代码具有如下功能:
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
对任何对象调用任何方法都是一种通用函数。但这是否意味着指定的方法已经是指定对象的隐式成员?
我确信我错过了一些对JavaScript函数基本概念的认真理解。请帮助我理解这一点。
您可以使用访问任何对象的成员。propertyName
表示法或[“propertyName”]
表示法。这就是JavaScript语言的特点。要确保成员位于对象中,只需检查(如果已定义):
function callMethod(method) {
return function (obj) {
if (typeof(obj[method]) == 'function') //in that case, check if it is a function
return obj[method](); //and then invoke it
}
}
foo。bar
和foo['bar']是相等的,因此您发布的代码与
alert('a'.toUpperCase())
当使用foo[bar]
时(注意没有引号),您不使用字面名称bar
,而是使用变量bar
包含的任何值。因此,使用foo[]
符号代替foo
允许您使用动态属性名称。
让我们看看
callMethod
:
首先,它返回一个以
obj
为参数的函数。当该函数被执行时,它将对该对象调用方法
。因此,给定的方法只需要存在于obj
本身或其原型链的某个地方。
在
toUpperCase
的情况下,该方法来自String。原型toUpperCase
-对于存在的每个字符串都有一个单独的方法副本是相当愚蠢的。
把它分解。
。toUpperCase()
是字符串的一种方法。原型
所以
'a'['toUpperCase'];
是通过属性toUpperCase
上的括号表示法进行的访问,来自String.prototype
。由于这个属性引用了一个方法,我们可以通过附加()
来调用它
'a'['toUpperCase']();
问题内容: 经常出现在Python模块中。即使阅读了Python的文档,我也不明白它的用途以及使用时间/方式。 有人可以举例说明吗? 关于我收到的基本用法的一些答案似乎是正确的。 但是,我需要了解有关工作原理的另一件事: 对我来说,最令人困惑的概念是当前的python版本如何包含未来版本的功能,以及如何使用当前版本的Python成功地编译使用未来版本的功能的程序。 我猜想当前版本包含了将来的潜在功
问题内容: 我正在尝试自己学习Socket。我对Oracle网站上的文字感到有些困惑。我对此有一些疑问。在此先感谢您的明确解释。 setSoTimeout 公共无效setSoTimeout(int超时)引发SocketException 以指定的超时时间启用/禁用SO_TIMEOUT,以毫秒为单位。将此选项设置为非零超时后,与此套接字关联的调用将仅在此时间量内阻塞。如果超时到期,则尽管Socket
问题内容: 正如我在标题中提到的 a + = b和a = + b以及a 和 a有什么区别?我有点困惑 问题答案: 相当于 相当于 且两者都增加1。不同之处在于,返回的是增量之前的值,而返回的是增量之后的值。 那是:
问题内容: 什么时候以及为什么要使用JavaScript? 问题答案: 通常,在事件处理程序(如中)中,返回false是一种告诉事件实际上未触发的方法。因此,在这种情况下,这意味着将不提交表单。
问题内容: 您经常在网络上读到使用闭包是JavaScript中大量内存泄漏的原因。在大多数情况下,这些文章都涉及混合脚本代码和DOM事件,其中脚本指向DOM,反之亦然。 我了解关闭可能是一个问题。 但是Node.js呢?在这里,我们自然没有DOM-因此像浏览器一样,没有机会出现内存泄漏的副作用。 关闭可能还会有什么其他问题?有人可以详细说明或指向我关于此的很好的教程吗? 请注意,此问题明确针对No
我有一个用Eclipse编写的Java代码库,我正试图在IntelliJ中使用它。代码库由大约20个Java包组成,这些包作为单独的项目并排构建。(大约有二十个目录,每个目录包含一个和文件。)他们互相依赖。想必Eclipse中的一切都构建得很好。 我让IntelliJ从Eclipse构建格式导入了这些。除了显示许多项目对有一个未解析的依赖关系之外,它基本上都起作用了。这似乎来自文件中的以下条目: