For the purposes of what I am trying to do, I've solved it.
I think the issue was that when "Icon" asked for "this.ele", it always received the same object, as the "ele" property was defined in "Drag" once, not every time a new instance of "Icon" was created. Making changes to this same object meant that all instances of "Icon" reflected these changes.
My solution is to call a method in "Icon" which creates a new "this.ele" for use by the current instance.
Code:
function Drag() {
this.createNew = function() {
this.ele = document.createElement("div"); } }
function Icon(id) {
this.createNew();
this.ele.id = id; }
Icon.prototype = new Drag();
var hello = new Icon("hello");
var goodbye = new Icon("goodbye");