Я относительно новичок в JS, и у меня проблемы с правильной эмуляцией принципов ООП.
У меня два вопроса. Вопрос первый касается многих способов объявления переменных.
Скажем, у меня есть класс:
function clazz(a)
{
this.b = 2;
var c = 3;
this.prototype.d = 4; // or clazz.prototype.d = 4?
}
var myClazz = new clazz(1);
Я исправлю следующие оценки:
a является частной переменной, специфичной для экземпляра (т.е. разные экземпляры clazz будут иметь уникальные и независимые переменные "a" ). Доступ к нему можно получить изнутри clazz как: 'a'.
b - общедоступная переменная, специфичная для экземпляра. Его можно получить изнутри clazz как "this.b" и извне clazz как "myClazz.b".
c является частной переменной, которая является статической или специфичной для класса (т.е. разные экземпляры clazz будут использовать одну и ту же переменную c). Доступ к нему можно получить из любого экземпляра clazz как "c", а изменения, например, clazz, отражаются во всех случаях clazz.
d - это переменная public, статическая/классная. Доступ к нему можно получить из любого места: clazz.prototype.d или myClazz.prototype.d.
Общая проблема с моим пониманием схемы переменных заключается в том, что нет способа объявить закрытую переменную, которая НЕ статична (т.е. уникальная версия для каждого экземпляра класса).
Второй вопрос касается разных типов объявлений классов.
Я использовал:
var MySingleton = new function() {...};
для создания синглетонов. Это верно? Я также не уверен относительно влияния "нового" ключевого слова в этой ситуации, а также скобки функции добавления() в конце объявления следующим образом:
var MySingleton = new function() {...}();
Я использовал этот шаблон для объявления класса, а затем создавал экземпляры этого класса:
function myClass() {...};
var classA = new myClass();
var classB = new myClass();
Это правильный метод?