2016-04-13 9 views
1

Ich versuche, das Modul Muster hier zu emulieren: https://css-tricks.com/how-do-you-structure-javascript-the-module-pattern-edition/Modul Muster: Funktion nicht definiert

Hier ist mein Code:

var RPSLS_UI = { 
settings: { 
    playerSelections: $(".card") 
}, 

init: function() { 
    this.bindUIActions(); 
}, 

bindUIActions: function() { 
    this.settings.playerSelections.on("click", function() { 
     console.log($(this)); 
    }); 
} 
}; 

ich die Abhängigkeiten in meinem HTML in dieser Reihenfolge enthalten sind:

<script src="https://code.jquery.com/jquery-2.2.3.min.js"></script> <script type="text/javascript" src="assets/js/rpsls-ui-1.0.js"></script> <script type="text/javascript" src="assets/js/index.js"></script>

Wenn ich meine HTML laden, gebe ich in der Konsole:

RPSLS_UI.init();

Ergebnisse in:

undefined

Dann tippe ich in:

RPSLS_UI.init;

Ergebnisse in:

function() { this.bindUIActions(); }

Was passiert hier? Warum ist die Funktion init() nicht definiert?

Antwort

1

Die Funktion ist nicht undefined. Es gibt undefined zurück, da es keine return Anweisung gibt. Wenn Sie es etwas zurückgeben möchten können Sie eine return-Anweisung, um es hinzuzufügen:

init: function() { 
    this.bindUIActions(); 
    return 'Hi!'; 
} 

Es scheint nicht, wie es notwendig ist, für sie etwas zurück, da sie eine andere Funktion aufruft, die einen Click-Handler bindet an Ihre DOM. Die Funktion hat Nebenwirkungen, gibt aber nichts zurück.

+0

Danke! Das macht Sinn! Ich war wirklich verwirrt, weil mein Klickereignis nie ausgelöst wird. Ich denke, das ist jetzt eine andere Frage. – iparke

+0

@iparke Gibt es Fehler in Ihrer Konsole? Meine erste Vermutung ist, dass Sie dieses Skript in das DOM aufnehmen, bevor irgendwelche Elemente mit der Klasse "card" existieren. Der Ausdruck '$ (". Card ")' muss ausgeführt werden, nachdem die Elemente existieren (IE. Setzen Sie das Skript direkt vor Ihr schließendes '' -Tag oder irgendwo anders, solange es nach allen Karten in Ihrem DOM ist). Sie könnten immer 'RPSLS_UI.settings.playerSelections.length' überprüfen, um zu sehen, wie viele Elemente dem Selektor – Paulpro

+0

2 für 2 entsprechen. Vielen Dank. – iparke

Verwandte Themen