this.method = function(){};
Only works for that specific instance.
Obj.prototype.method = function(){};
Will work for every instance of Obj
Though in order to take advantage of prototype
you should do
var o = new Obj(); // Note that functions intended to be used with "new" should be capitalized
o.method();
Dice Example
I'll assume you intended to return this
in your dice()
function.
That example is not really common, because calling a function does not create a new object. In your dice case you would be assigning a method to this
, which inside the function is window
the global object, and then returning it.
The outcome would be the same object (window
) in both d1
and d2
, with a method roll
which would be reassigned in the 2nd call.
To achieve what you want you should create the instances with new
, like this:
var d1 = new Dice(6); // remember capitalization is important here
var d2 = new Dice(20);
This will however create 2 roll
functions, which is correct but wastes memory since the function can be shared by doing:
Dice.prototype.roll = function() { /* return random awesomeness */ };
Hope that clarifies things
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…