Reputation: 67
This code gives me two errors when I'm trying it in JSHint.
The error is: Expected an assignment or function call and instead saw an expression.
I understand what the error mean, but I can't figure out why I'm recieving it.
The code works as it is.
function flag(land, position) {
this.pos = position,
this.link = land,
this.hideFlag = function () {
position.innerHTML = ' ';
},
position.addEventListener('click', this.hideFlag.bind(this)); //Here
}
var elfenbenskusten = new flag('<div id="flag-elfenbenskusten" class="flag elfenbenskusten"><div class="part1"></div><div class="part2"></div></div>', document.getElementById('flag-elfenbenskusten')),
sverige = new flag('<div id="flag-sverige" class="flagga1 sverige"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div></div>', document.getElementById('flag-sverige')),
maruritius = new flag('<div id="flag-maruritius" class="flagga2 maruritius"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div><div class="box5"></div></div>', document.getElementById('flag-maruritius')),
japan = new flag('<div id="flag-japan" class="flagga3 japan"><div class="box1"></div><div class="cirkel1"></div></div>', document.getElementById('flag-japan')),
flags = [];
flags.push(
elfenbenskusten,
sverige,
maruritius,
japan
),
function () {
for (var land = 0; land < flags.length; land++)
flags[land].pos.innerHTML = flags[land].link;
}(); //Here
Upvotes: 0
Views: 168
Reputation: 674
function flag(land, position) {
this.pos = position, // <== why , and not ;?
this.link = land, // <== why , and not ;?
this.hideFlag = function () {
position.innerHTML = ' ';
}, // <== why , and not ;?
position.addEventListener('click', this.hideFlag.bind(this)); //Here
}
and also at the end of the flag.push()
Upvotes: 2
Reputation: 943568
JSHint expects you to use separate statements (terminated with semi-colons) but you are using a single statement with each expression being separated with the comma operator.
That also allows you to unwrap your for
loop from the function expression.
function flag(land, position) {
this.pos = position;
this.link = land;
this.hideFlag = function () {
position.innerHTML = ' ';
};
position.addEventListener('click', this.hideFlag.bind(this));
}
var elfenbenskusten = new flag('<div id="flag-elfenbenskusten" class="flag elfenbenskusten"><div class="part1"></div><div class="part2"></div></div>', document.getElementById('flag-elfenbenskusten')),
sverige = new flag('<div id="flag-sverige" class="flagga1 sverige"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div></div>', document.getElementById('flag-sverige')),
maruritius = new flag('<div id="flag-maruritius" class="flagga2 maruritius"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div><div class="box5"></div></div>', document.getElementById('flag-maruritius')),
japan = new flag('<div id="flag-japan" class="flagga3 japan"><div class="box1"></div><div class="cirkel1"></div></div>', document.getElementById('flag-japan')),
flags = [];
flags.push(
elfenbenskusten,
sverige,
maruritius,
japan
);
for (var land = 0; land < flags.length; land++) {
flags[land].pos.innerHTML = flags[land].link;
}
Upvotes: 2