reference - 事件对象属性

时间:2011-09-09 03:07:51

标签: javascript

关于下面的代码,解释器如何知道该事件具有属性.keyCode。这段代码有效,我只是完全不明白为什么,而且更多的是这个记录。它是如何知道对象事件的类型。如果我称之为'e'或'e1'怎么办?方法原型f1(事件)在哪里记录?

function b0(event) 
  {if (event.keyCode==13) 
    {i4(); 
    return false;}} 


function o5('f4b_',b0); 

o5(a,b){document.getElementById(a).onkeypress=b;}

其中元素id a是输入文本框。

3 个答案:

答案 0 :(得分:2)

事件的名称是无关紧要的,在函数内部它只是另一个变量。您可以将其重命名为JellyMan,如果您将if (event.keyCode==13)重命名为if (JellyMan.keyCode==13),它将正常工作。

事件类型由脚本在运行时确定。解释器不知道该事件具有.keyCode属性 - 如果您尝试调用它,并传入一个不正确类型的参数:b0('wheee, break it');那么它将失败。

当作者编写脚本时,他认为函数b0将采用一个参数(他称之为事件)并且它将是一个eventHandler - 这在任何地方都没有指定,它只是假设没人会打电话给它别的。所有eventHandlers都有一个.keyCode属性,因此假设传入的对象有一个。

答案 1 :(得分:0)

口译员不必“知道”。当运行时系统调用事件处理程序时,它会向它传递一个具有或多或少记录良好的属性的对象。

如果您在传入奇怪事件对象的损坏的浏览器中运行该代码,则代码将失败。

答案 2 :(得分:0)

请记住,javascript是解释代码,而不是预编译代码。任何变量都可以包含任何类型。

因此,在函数b0中,第二行代码:

if (event.keyCode==13)

告诉解释器获取传递给函数的第一个参数(名为event)并从中获取名为keyCode的属性。 Javascript将查看event参数,看看它是否是具有属性的正确变量类型,以及它是否实际上具有名为keyCode的属性。如果是,它将获取它的值并将其与13进行比较。如果它不是具有任何属性的正确类型的变量,那么该行代码将失败并且javascript将引发异常。如果它是具有属性的正确类型的变量,但没有名为keyCode的属性,那么它将继续使用undefined的该属性的值,该值将使13的相等性测试失败。