function vehicle(id) {
Konstruktoren sollte man groß schreiben, um sie von Instanzen unterscheiden zu können. Also »Vehicle«. Dann ist immer klar, dass sie zusammen mit »new« verwendet werden.
vehicle.prototype = document.createElement("div");
Prinzipiell kannst du so arbeiten, aber von der Logik her halte ich das nicht für passend. *Ist* eine vehicle-Instanz ein spezielles div? Nein, es *hat* offenbar ein div, mit dem es z.B. dargestellt wird, oder?
Übrigens nutzen hier alle vehicle-Instanzen dasselbe div, das ist dir klar, oder? Es gibt hier nur ein einziges div, an das delegiert wird, denn alle Instanzen haben ein und denselben Prototyp.
Daher würde ich das div einfach im Konstruktor erzeugen, etwa
this.element = document.createElement('div');
Zu deinem Firefox-Problem: Im Firefox funktioniert es einfach nicht, ein konkretes Elementobjekt um eine Methode zu erweitern, das Elementobjekt als Prototyp zu verwenden und schließlich die Methode des Elementobjekts per prototypische Delegation auf der Instanz aufzurufen.
Ehrlich gesagt weiß ich auch nicht, wieso man das tun sollte. Es mag manchmal sinnvoll sein, an ein Elementknoten prototypisch zu delegieren. Dann würde ich die Methoden dieses Wrappers aber nicht dem gewrappten Elementobjekt verpassen, sondern dem Wrapper. Wenn es viele Wrapper gibt, dann würde ich als Prototyp ein eigenes Objekt verwenden, welches wiederum an das Elementobjekt delegiert.
Ich kann mir aber nicht vorstellen, dass du mit solch langen Prototyp-Ketten arbeiten willst. Üblicher ist wie gesagt, dass ein Objekt ein Elementobjekt *hat* (this.element o.ä.). Was willst du erreichen?
Mathias