this.method = function(){};
Работает только для этого конкретного экземпляра.
Obj.prototype.method = function(){};
Будет работать для каждого экземпляра Obj
Хотя, чтобы воспользоваться prototype
, вы должны сделать
var o = new Obj(); // Note that functions intended to be used with "new" should be capitalized
o.method();
Пример игры в кости
Я предполагаю, что вы намеревались return this
в своей функции dice()
.
Этот пример не очень распространен,потому что вызов функции не создает новый объект .В случае с игрой в кости вы должны назначить метод для this
, который внутри функции равен window
глобальному объекту, а затем вернуть его.
Результатом будет тот же объект (window
)в обоих d1
и d2
, с методом roll
, который будет переназначен во втором вызове.
Чтобы достичь того, что вы хотите, вы должны создать экземпляры с new
, например так:
var d1 = new Dice(6); // remember capitalization is important here
var d2 = new Dice(20);
Это, однако, создаст 2 roll
функций, что правильно, но тратит память, так как функцию можно разделить, выполнив:
Dice.prototype.roll = function() { /* return random awesomeness */ };
Надеюсь, что все прояснит