機能の割り当て方法によって異なります。これを見てください :
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'
あなたがこれをASSINGとき(それはオールウェイズ(関数定義から名前を返します他の変数.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'); };
は、 (他の変数には割り当てられていません)ので、他の関数と比較することはできません(compareは常にfalseを返します)。
あなたは何をしようとしていますか? – Thilo
document.onkeydown =現在の機能(私は名前を知らない) document.onkeydown = my function 私は以前に変更した現在の関数にdocument.onkeydownを設定したいと思います。 –
それを擬似コードで書き留めてもいいですか? – Niko