2017-05-11 6 views

Antwort

4

Sie können diese verwenden:

var onRegionMouseHandlers = { 
    out: function() {}, 
    in: function() {} 
} 

// and using like this 
var whatToUse = 'in'; 
// use 
onRegionMouseHandlers[whatToUse]() 

Sie können auch Ihre auswählen, welche Funktion aufgerufen werden muss. Sie können einfach zwei Handler zu zwei verschiedenen Ereignissen hinzufügen.

2

Sie können die Funktionen als Eigenschaften eines Objekts definieren, Klammer Verwendung Notation, um die Funktion aufzurufen.

const methods = { 
 
    onRegionMouseOver() {console.log("Over")}, 
 
    onRegionMouseOut() {console.log("Out")} 
 
} 
 

 
let fn = "onRegionMouse"; 
 

 
let type = "Out"; 
 

 
methods[`${fn}${type}`](); 
 

 
type = "Over"; 
 

 
methods[`${fn}${type}`]();

ohne Vorlage wörtliche oder let

var methods = { 
 
    onRegionMouseOver: function onRegionMouseOver() {console.log("Over")}, 
 
    onRegionMouseOut: function onRegionMouseOu() {console.log("Out")} 
 
} 
 

 
var fn = "onRegionMouse"; 
 

 
var type = "Out"; 
 

 
methods[fn + type](); 
 

 
type = "Over"; 
 

 
methods[fn + type]();

+1

Beachten Sie, dass diese Zeichenfolge Definitionsnotation (Template-Literale - weiß nicht, wie man das korrekt nennt) funktioniert nur mit einigen modernen Browsern. Oder Sie müssen diesen Code transpilieren. Gleiches für 'Let' Schlüsselwort –

+1

@SharikovVladislav Siehe aktualisierten Beitrag. – guest271314

+0

Ich denke, es wird nett sein, wenn Sie _why_ erwähnen werden, geben Sie 2 Varianten: modern und nicht-modern. –

0

Sie können so etwas tun, vorausgesetzt, Sie deklarieren ein Objekt, das die Funktionen enthält.

var onRegionMouse = { 
    Out: onRegionMouseOut, 
    Over: onRegionMouseOver 
}; 

Jetzt können Sie nur

tun
var type = 'Out'; 
onRegionMouse[type](); 
0

was:

var myFunctions = { 
    out: function onMouseOut()..., 
    enter: function onMouseEnter()... 
} 

Sie können es nennen jetzt mit MyFunctions [ "out"]()

+0

Es gab bereits 3 ähnliche Antworten, von denen zwei identisch sind. – DarthJDG

+0

Oups, als ich auf die Frage antwortete, hat keine Antworten – Ahmed

Verwandte Themen