Когда вы устанавливаете print
непосредственно на объект (с this.print
), вы используете некоторую память для хранения свойства (здесь метода) для каждого объекта (создание экземпляра вашего класса). Когда вы определяете его на прототипе, все экземпляры будут иметь одно и то же свойство (так же, как и в той же памяти).
У вас также возникнут проблемы с использованием inheritance.
Если вам нужен только один экземпляр вашего «класса», вы должны использовать шаблон singleton. Но для более мощного решения я бы предложил вам попробовать фреймворк, реализующий компонент инъекции зависимостей, потому что singleton is almost an anti-pattern. Пример такого вида фреймворка можно найти по ссылке в моем профиле (вы не можете использовать его без сервера node.js, но это хороший пример).
Наконец, вы можете определить свой класс, как следующее:
var Class = function() {
this._x = 25; // Public variable
this._y = 10; // Private variable
}
Class.prototype.print = function() {
alert(this._x + this._y);
}
Object.defineProperty(Class.prototype, 'x', {
get: function() { return this._x; }
});
var obj = new Class();
obj.print();
alert(obj.x);
alert(obj.y);
какой смысл создать только один экземпляр без возможности создать больше? –
Код является частью моей игры http://meghprkh.github.io/samehue/, где классы, такие как Manager, Input Manager, Display Manager, создаются только один раз, но они помогают выделить код в виде пространств имен. –
Общая практика заключается в том, чтобы использовать функции самоисполнения для этого –