如何在Javascript中获取document.onkeydown函数的名称
How to get name of document.onkeydown function in Javascript?
document.onkeydown.toString()
返回onkeydown
函数,但我只想得到这个函数的名称。
有可能吗?
var exHandler;
function getCurrentHandler(){
currentHandler = document.onkeydownhandler.toString() - i want to get name of this to call setPreviousHandler with exHandler
document.onkeydown = newFunction;
setPreviousHandler(exHandler);
}
function setPreviousHandler(targetHandler){
document.onkeydown = targetHandler;
}
这取决于函数的分配方式。看看这个:
function test() { alert('test'); }
window.onkeydown = test;
window.onkeydown.toString();
输出是function test() { alert('test'); }
,您可以解析此字符串以获得其名称为字符串:
var fnsting = window.onkeydown.toString();
// use regexp to extract name
var name = fnsting.match( /function's*(.*?)'s*'(/ )[1]; // name is 'test'
(它将始终返回函数定义中的名称(当您将此函数分配给其他变量.toString()
时,它总是返回相同的字符串)
但以下示例:
window.onkeydown = function () { alert('test'); };
window.onkeydown.toString();
将打印function () { alert('test'); }
,因为此函数是匿名的,因此无法获取其名称。
此外,当你创建这样的函数时:
var test = function () { alert('test'); };
window.onkeydown = test;
window.onkeydown.toString();
输出将是function () { alert('test'); }
,因为在创建函数时并没有名称(它是分配给变量的函数表达式),所以您也无法提取它的名称。
但你可以做一个简单的比较:
function foo() { alert('foo'); }
var bar = function () { alert('bar'); };
window.onkeydown = foo;
// try to find function
if (window.onkeydown === foo) {
alert('this is foo');
} else if (window.onkeydown === bar) {
alert('this is bar');
}
// or like this:
var handler = window.onkeydown;
if (handler === foo) {
alert('this is foo');
} else if (handler === bar) {
alert('this is bar');
}
但这也有问题,因为当你分配这样的匿名函数时:
window.onkeydown = function () { alert('test'); };
您没有对该函数的任何其他引用(它没有分配给其他变量),因此无法将其与其他函数进行比较(比较总是返回false)。
不,这是不可能的。函数名在javascript中并不明显。示例:
function john() {
// ... do something ...
}
var jim = john;
您现在认为该函数的名称是什么?"约翰"还是"吉姆"?-他们都指向完全相同的东西,没有任何不同。另一个例子可以说明:
var john = function() { /* ... */ };
var jim = john;
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 如何在Javascript中获取document.onkeydown函数的名称
- 在onKeydown函数中获取当前元素
- onKeyDown处理函数只工作一次
- 在onkeydown事件中调用作用域函数
- 执行javascript函数onkeydown
- Onkeydown JS 函数,用于添加调用同一函数的输入
- Javascript函数在OnKeyPress和OnKeyDown事件上没有被调用