2016-04-25 8 views
0

Ich erstelle eine Rechtschreibung Biene Web-App für die Schule, die ich arbeite. Meine Idee ist, die Schüler auf einen Knopf klicken zu lassen, der zufällig den Ton eines Wortes auswählt und spielt. Dann schreiben sie das Wort auf das Formular und reichen es zur Korrektur ein.Nach dem Zufallsprinzip wählen und spielen Audio-Eigenschaft des Objekts

Das ist mein Prototyp Code

1., ein Objekt mit den Worten Namen und Audiodateien.

var words = {} 
words.carrot = { 
audio : new Audio ('http://dictionary.cambridge.org/media/english-portuguese/uk_pron/u/ukc/ukcar/ukcarap002.mp3'), 
name : "CARROT" 
} 
words.ball = { 
audio : new Audio ('http://dictionary.cambridge.org/us/media/english/us_pron/b/bal/ball_/ball.mp3'), 
name : "BALL" 
} 

Dann eine Funktion, die zufällig eine Eigenschaft des Objekts auswählt. Es würde durch Klicken auf eine Schaltfläche aufgerufen werden.

var play = function(){ 

var list = Object.keys(words); 

var randomWord = list[Math.floor(Math.random()*list.length) ]; 
} 

So weit, so gut.

Was ich nicht geschafft habe, ist, das resultierende Wort wieder in die Objektsyntax einzubauen. Aus Gründen der Prüfung habe ich versucht, die folgenden:

document.getElementById("demoparagraph").innerHTML = randomWord 

Und es zeigt perfekt eine der Eigenschaften.

Aber das funktioniert nicht: words.randomWord.audio. Es gibt "undefined" zurück.

Wohingegen words.carrot.audio funktioniert gut.

+1

Sie missverstehen Javascript-Objekte. words.carrot funktioniert, weil Karotte eine Eigenschaft ist. Sie haben ein Objekt mit zwei Eigenschaften, Karotte und Ball, erstellt. Kein Array mit zwei Optionen. – samuelmr

+1

Sie müssen Bracket-Notation 'words [randomWord] .audio' verwenden – jcubic

+0

Die Klammernnotation funktionierte! Vielen Dank! – Evan

Antwort

-2

Sie suchen dynamisch mit einer Variablen eine Objekteigenschaft zuzugreifen, die mit diesem möglich ist:

words[randomWord].audio 

Siehe this fiddle example & this stackoverflow question.

+0

Words ist im Beispiel kein Array. – samuelmr

+0

@samuelmr muss es nicht sein, Sie können Objekteigenschaften dynamisch durch Bracket-Notation zugreifen. – jamiestraw

Verwandte Themen