4.8 Function()构造函数与函数直接量
除了可使用基本的function语句定义函数之外,还可使用Function()构造函数和函数直接量来定义函数。这两者之间存在很重要的差别。
构造函数Function()允许在运行时动态创建和编译JavaScript代码,而函数直接量却是程序结构的一个静态部分,就像函数语句一样。
每次调用构造函数Function()时都会解析函数体,并且创建一个新的函数对象。如果对构造函数的调用出现在一个循环中,或者出现在一个经常被调用的函数中,这种方法的效率将非常低。而函数直接量不论出现在循环体还是嵌套函数中,既不会在每次调用时都被重新编译,也不会在每次遇到时都创建一个新的函数对象。
Function()创建的函数使用的不是静态作用域。相反地,该函数总是被当作顶级函数来编译。
【例4.6】 通过自定义函数实现屏蔽鼠标和键盘相关事件。(实例位置:资源包\TM\sl\4\06)
为了确保网站资源的安全,很多网站都会对用户的一些操作进行限制,如屏蔽鼠标右键等。这些功能通过JavaScript即可实现。
(1)编写自定义的JavaScript函数maskingKeyboard(),在该函数中屏蔽键盘的Enter键、Backspace键、F5键、Ctrl+N快捷键、Shift+F10快捷键,代码如下:
(2)在页面的<body>标记的键盘按下事件onkeydown中,调用maskingKeyboard()函数屏蔽键盘的相关事件,代码如下:
<body onkeydown="maskingKeyboard()">
(3)编写自定义的JavaScript函数rightKey(),用于屏蔽鼠标右键。rightKey()函数的代码如下:
(4)在文档的onmousedown事件中调用rightKey()函数,用于屏蔽用户在页面中右击时所触发的事件,代码如下:
document.onmousedown=rightKey; //当鼠标右键被单击时,调用rightKey()函数
运行程序,在页面中按下Enter键、Backspace键、F5键、Ctrl+N快捷键、Shift+F10快捷键以及鼠标右键时,都将给予提示,并且屏蔽掉这些事件所触发的动作。例如,右击时,将弹出如图4.6所示的提示对话框。
图4.6 在页面中屏蔽鼠标右键和键盘相关事件