Ich habe die Seite www.99-bottles-of-beer.net um eine JavaScript-Implementation ergänzt. Dabei ist mir ein kleiner Fehler unterlaufen: in der Funktion verse[2]() muss der zweite Parameter in dem Aufruf zu createVerse() “takeOneDown()+’1 bottle of beer on the wall.’” lauten.
Hier also der korrigierte Quellcode:
function song() {
bottlesOfBeer = function(i) { return i+’ bottles of beer’; }
bottlesOfBeerOnTheWall = function(i) { return this.bottlesOfBeer(i)+’ on the wall’; }
takeOneDown = function() { return ‘Take one down and pass it around, ‘; }
createVerse= function(first,second) {
var rval = document.createElement(’p’);
rval.appendChild(document.createTextNode(first));
rval.appendChild(document.createElement(’br’));
rval.appendChild(document.createTextNode(second));
return rval;
}
getNormalVerseFunction = function(i) {
return function() {
return createVerse(
bottlesOfBeerOnTheWall(i)+’, ‘+bottlesOfBeer(i),
takeOneDown()+bottlesOfBeerOnTheWall(i-1)+’.’
);
}
}
verse = new Array();
for( var i = 3; i < 100; i++ )
verse[i] = getNormalVerseFunction(i);
verse[2] = function() {
return createVerse(
bottlesOfBeerOnTheWall(2)+’, ‘+bottlesOfBeer(2),
takeOneDown()+’1 bottle of beer on the wall.’
);
}
verse[1] = function() {
return createVerse(
‘1 bottle of beer on the wall, 1 bottle of beer.’,
takeOneDown()+bottlesOfBeerOnTheWall(’no more’)+’.’
);
}
verse[0] = function() {
return createVerse(
bottlesOfBeerOnTheWall(’No more’)+’, ‘+bottlesOfBeer(’no more’),
‘Go to the store and buy some more, ‘+bottlesOfBeerOnTheWall(99)+’.’
);
}
this.getDom = function() {
var rval = document.createElement(’div’);
for( var i = 99; i >= 0 ; i-- )
rval.appendChild(verse[i]());
return rval;
}
}
document.getElementsByTagName(’body’)[0].appendChild(new song().getDom());