When you do an instanceof check,
f instanceof Foo
it will take the internal [[prototype]] object (which can be accessed with Object.getPrototypeOf) and find if it occurs anywhere in the Foo's prototype chain, till it finds Object along the line.
Another important point to be noted here is, Foo.prototype is the same as Bar.prototype. Because you assign the same object to both the properties. You can confirm this like this
console.log(Foo.prototype === Bar.prototype);
// true
console.log(Object.getPrototypeOf(f) === Object.getPrototypeOf(b));
// true
That is why all the instanceof checks you made in the question return true.
To fix this, you need to create the prototype Objects, based on EventEmitter's prototype (not with it). You can use Object.create to do that for you. It takes an object, which should be used as the prototype of the newly constructed object.
Foo.prototype = Object.create(EventEmitter.prototype);
...
Bar.prototype = Object.create(EventEmitter.prototype);
with this change,
console.log(Foo.prototype === Bar.prototype);
// false
console.log(Object.getPrototypeOf(f) === Object.getPrototypeOf(b));
// false
console.log(f instanceof Foo);
// true
console.log(b instanceof Bar);
// true
console.log(f instanceof Bar);
// false
console.log(b instanceof Foo);
// false