这是什么奇怪的JavaScript数组语法?

我有一些麻烦,谷歌搜索和计算器的答案是什么这段JavaScript代码是这样做的:

obj['e'+type+fn]( window.event );

对我来说,这看起来像一个参数/参数数组元素:

array[index](argument);

但是,我只能猜测这是什么在做什么。 这是等同于:

array[index]=argument

这是分配的一个参数数组元素?

如果有人可以提供什么这是做一个简单的/通用的例子,将是巨大的。 我试图破译约翰Resig的addEvent()的实现。 我真的不想找这个实现或示例涉及到它的解释,而更像是像一个MDC简单化向下的例子已经做了使用了一些想象的产品电话。

--------------解决方案-------------

obj['e'+type+fn]( window.event );

这仅仅是一个访问的对象的属性的方法。 举例来说,如果你有一个对象

a = {
name: 'someName'
age: 20
};

您可以通过使用访问名a.name或者,如上a['name']

他使用的原因[]符号就是让他可以建立从多个字符串的关键。

因此,如果type=clickfn=foo他访问obj.eclickfoo 。 或obj['eclickfoo']

对象的这个属性必须是一个方法,他用调用它(); 如此反复,他说:

obj.eclickfoo( window.event );

或同等学历

obj['eclickfoo']( window.event );

这是它在做什么:

从阵列obj ,它需要与指数函数'e'+type+fn 。 然后,它执行该传递window.event作为参数。

请记住, ()调用的函数,并且[]从数组中提取的值。

obj['e'+type+fn]返回函数的类型。 这然后用执行window.event作为参数。

obj['e'+type+fn]( window.event );

的确阵列可以使用“OBJ [......]”符号,但这样就可以在JavaScript中的任何对象。 在这种情况下,Resig的是增加的属性,以任何目的,特别为DOM对象。

obj['aVar']相当于obj.aVar 。 前者的优点是,它也可以与它们在JavaScript中保留具有特殊含义的关键字工作(例如,物镜['变种']如果定义一个称为对象上的“变种”属性),并允许属性名称是动态访问,因为在你的榜样。 因为type是一个变量,你不能这样做obj.type因为这将被找到的属性恰好名为“类型”,没有找到与名称等于的值的属性type的变量。

由于对象(或阵列)可以容纳功能的数据,你也可以在一个对象或数组里面发现了一个函数中使用调用运算符(匹配括号),因为在这里完成 - 属性被访问(这是以前存储在对象上的“方法”或功能),然后与调用window.event对象作为单个参数。

功能也都有内置toString他们的原型方法(将调用在这样的你在哪里都串联为一个字符串,因此必须要一个字符串的情况下,只要你不设置自己toString方法上你的功能,因为功能也是JavaScript中的对象!)。 Resig的代码是利用这一点,来定义一个新的属性,有点随意这通常是一个坏主意,但在某种程度上,这是非常不可能与其他应用程序也将这样的属性发生冲突。

因此,如果document.bodyobj ,并且如果type变量设置为“点击”和“FN”设置为function () {alert('boo!');}"它实际上将命名的文件的属性。体对象为“eloadfunction(){警报('嘘!');}。”他解释说,创建这个属性(然后调用它自己的匿名函数内),使功能与正常的行为被称为inside--使用的任何关键字“this” this将参考父对象,在这种情况下obj ,而不是全局(除非obj是全球-即window对象)。

分类:JavaScript的 时间:2012-01-01 人气:0
本文关键词: JavaScript中,语法
分享到:

相关文章

  • 在JavaScript中语法高亮(BNF,EBNF) 2014-12-05

    我在寻找一个支持语法元BNF一样EBNF或一个语法高亮显示. 到目前为止,我一直在使用谷歌的如Python,JavaScript和等语言美化荧光笔,但它不支持元语法. 我无法找到任何语法hightlighter,做. 如果有真的没有在那里,一个非常基本的实施将适合我的需要: <XYZ>在红色 [XYZ]在绿色 它只是需要支持嵌套表达式,如: [<func>=] lambda [<arg1>, <arg2>, ...]: <return expressi

  • 在JavaScript中,创建属性时,这是正确的方式或更好的语法? 2012-10-24

    属性(键)可以访问和使用点符号以及方括号设置. 何时使用点语法原型任何意见 var myObj = {}; myObj.myProp1 = 'value1'; //works, an expando property myObj[myProp2] = 'value2'; // FAILS, myProp2 is undefined myObj["myProp2"] = 'value2'; // works, an expando property myObj[2010]= 'value

  • 这是否PHP语法在JavaScript中存在吗? 功能(VAR = NULL) 2013-07-05

    在PHP中,我如果该参数不传递函数的变量设置为null. 例如: 函数调用: myExample(8); 函数定义: function myExample($var1, $var2 = null); 预期结果: $var 1 = 8; $var 2 = null; 请问类似的语法在JavaScript中存在吗? 我试着做直线上升,并没有奏效. --------------解决方案------------- 总之,没有. 您不能分配在函数声明中的默认值. 但: function myExample

  • 你怎么使用了,语法在JavaScript中得到循环计数器/指数? 2014-04-28

    编辑:请不要使用在-遍历数组,用它来 ​​遍历一个对象的属性 . 我会继续这个答案了作为参考. 谢谢大家! 我了解基本的,在语法在JavaScript中循环如下所示: for(var obj in myArray) { } 可是我怎么循环计数器/指数? 我知道我大概可以这样做: var i = 0 for(var obj in myArray) { alert(i) i++ } 甚至好,老: var i for(i = 0; 1 < myArray.length(); i++) { var ob

  • 语法/逻辑检查在Javascript中? 2014-10-27

    我建立了一个客户,让他们能够创建非常基本的代码的解决方案,现在我已经做了一些基本的语法验证,但我被困在变量验证. 我知道的JSLint确实,如果有人知道的一个很好的办法做到这一点这种使用Javascript,我不知道. 因此,例如说,用户写的代码 moose = "barry" base = 0 if(moose == "barry"){base += 100} 然后我试图找到一种方法来澄清,"如果"的表达是正确的语法,如果变量驼鹿一直等等等初始

  • 什么是JavaScript中引号的权利C#语法 2012-06-13

    什么是JavaScript代码中添加的if / else C#声明corect方式吗? <script type="text/javascript"> var test = "<%=if(btn1.Text=="a") btn1.Text else "N/A" %>"; </script> --------------解决方案------------- 您可以在JavaScript中使用单引

  • 可以争论在JavaScript中使用ColdFusion语法引用? 2013-06-09

    在ColdFusion的,如果你要引用 <cfargument name="x"> 然后你说: arguments.x 在JavaScript中,如果你有一个函数: var myFunction = function(x) { 那么,有没有明确引用参数范围如可能的方式: arguments[0].x 什么让你作用域的一切. --------------解决方案------------- 没有办法通过使用参数可变的,因为它拥有参数名的任何信息来实现相同的功能. 为了规避这个问

  • 如何记录在JavaScript中的命名空间? 2012-01-10

    如何命名空间在JavaScript中记录与jsDoc? 这里是我的尝试,这是正确的? /** * My special namespace * * @name my.namespace * @namespace */ $namespace('my.namespace', /** @lends my.namespace **/ { /** * Foo - does something really neat... * @function */ foo: function() { } }); 只是为

  • 什么是“使用严格的”做在JavaScript中,什么是它背后的原因? 2012-01-15

    最近,我跑我的一些JavaScript代码通过Crockford的JSLint的,它给了以下错误: 问题1行字符1:缺少"使用严格"语句. 做一些搜索,我意识到有些人添加"use strict";到他们的JavaScript代码. 有一次,我加的说法,错误停止出现. 不幸的是,谷歌并没有透露太多这背后字符串声明的历史. 当然,它必须有事情做有多大的JavaScript是由浏览器解释,但我不知道效果会怎样. 那么,什么是"use strict";一

  • 在Javascript中使用jQuery参数 2012-02-10

    我试图从PHP一个参数传递到我的里面的html javascript函数. 这是在所有可能的? 这是我这么远,但它似乎崩溃,一旦它击中的条件: $str="<input type='submit' value='-' onclick='Call(".$row['field1'].");'/>"; 我希望我不会找一个工作围绕这一点. 谢谢. 编辑:这是我想要调用的函数 function Call(stuff) { alert(stuff); $.get('

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.014 (s). 10 q(s)