2012-03-29 14 views
0

document.onkeydown.toString() gibt onkeydown-Funktion zurück, aber ich möchte nur den Namen dieser Funktion erhalten.Wie bekommt man den Namen der Funktion document.onkeydown in Javascript?

Ist es möglich?

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; 
} 
+0

Was möchten Sie tun? – Thilo

+0

document.onkeydown = aktuelle Funktion (ich kenne den Namen nicht) document.onkeydown = meine Funktion Ich möchte document.onkeydown auf die aktuelle Funktion einstellen, die ich vorher geändert habe. –

+0

Kannst du das bitte in Pseudocode schreiben? – Niko

Antwort

1

es auf dem Weg hängt die Funktion zugewiesen wurde. Nehmen Blick auf diese:

function test() { alert('test'); } 
window.onkeydown = test; 
window.onkeydown.toString(); 

Ausgang ist function test() { alert('test'); } und Sie diese Zeichenfolge analysieren kann seinen Namen als String zu erhalten:

var fnsting = window.onkeydown.toString(); 
// use regexp to extract name 
var name = fnsting.match(/function\s*(.*?)\s*\(/)[1]; // name is 'test' 

(es wird wieder Allways Namen von Funktionsdefinition (wenn Sie dies assing Funktion auf andere Variable .toString() liefert immer die gleiche Zeichenfolge)

aber folgendes Beispiel:

window.onkeydown = function() { alert('test'); }; 
window.onkeydown.toString(); 

wird function() { alert('test'); } drucken, da diese Funktion anonym ist, so dass Sie ihren Namen nicht erhalten können.

Darüber hinaus, wenn Sie Funktion wie folgt erstellen:

var test = function() { alert('test'); }; 
window.onkeydown = test; 
window.onkeydown.toString(); 

und Ausgang wird function() { alert('test'); } weil bei der Erstellung Funktion sein nicht Namen haben (es war Funktion Ausdruck Variablen zugewiesen), so können Sie auch nicht extrahieren seinen Namen.

Aber man kann einfach Vergleich machen:

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'); 
} 

Aber es wird auch mit diesem Thema, denn wenn man diese anonyme Funktion wie zuweisen:

window.onkeydown = function() { alert('test'); }; 

Sie haben keinen anderen Bezug zu dieser Funktion (es ist nicht zu anderen Variablen zugeordnet), so dass Sie es nicht mit anderen Funktionen vergleichen können (Vergleich gibt immer false zurück).

1

Nein, das ist nicht möglich. Funktionsnamen sind in JavaScript nicht eindeutig. Beispiel:

function john() { 
    // ... do something ... 
} 

var jim = john; 

Was würden Sie jetzt den Namen dieser Funktion nennen? "John" oder "Jim"? - Beide deuten auf genau dasselbe hin und unterscheiden sich in nichts. Ein anderes Beispiel kann klarstellen, dass:

var john = function() { /* ... */ }; 
var jim = john; 
Verwandte Themen