Earlier I mentioned truly private data. This isn't possible currently but I can make a suggestion to both make it avoid collisions it subclasses, and to make it easily upgradeable one ES6 comes around.

Now

First, define all your private methods external to your class and make them take the object as the first parameter. Make sure that these are not visible externally. (you can use a closure to wrap it)

function AggressiveMob_doSomething(self, data) {
	// Use `self` instead of `this`.
}

// Call like.
AggressiveMob_doSomething(this, data);

Then for private data I recomend using a helper function to get access to it. It will look something like this.

// Create private function.
function getpriv(self) {
	return self._AggressiveMobPrivate;
}

// In constructor.
this._AggressiveMobPrivate = {};

// In methods.
var priv = getpriv(this);

The future

When ES6 comes around we will have weak maps. You will be able to upgrade your data to completely private by changing three lines.

// Create private function.
var privdatamap = new WeakMap();
function getpriv(self) {
	return privdatamap.get(self);
}

// In constructor.
privdatamap.set(this, {});

// In methods, the same.
var priv = getpriv(this);

This allows access to private data only to code with access to privdatamap or getpriv(). It is also worth noting that you can assess the private data of other instances.

~~~js function mymethod(other) { var mypriv = getpriv(this; var otherpriv = getpriv(other);

// do stuff... } ~~