C наступающим!
Начал знакомиться с JS, в основном - на этом сайте, спасибо Вам!
К вопросу - сначала заготовил значения по умолчанию - конструктор:
var MyDb = function (name) {
this.name=name;
this.objStoreList=['fromCons'];
this.origin='coreJSON'
// other props}
И есть объект (будет получаться в виде JSON по XHR)
var myDbs = {
dbsList:
[
{name:'CoreDb',objStoreList:['theFirst1']},
{name:'OtherDb'},
{name:'MiscDb', origin:'miscJSON'}
],
up2Date:TS22().TimeStamp, //etc...};
И необходимо заполнить отсутствующие свойства и методы объектов из массива dbsList дефолтными из конcтруктора MyDb (сохраняя уже имеющиеся значения).
Сначала вдохновился примерами с
prototype#наследование-через-ссылку-proto:
Через цикл myDbs.dbsList.forEach делал
item.__proto__ = new MyDb
Что прекрасно меня удовлетворяло, ибо в прототипе каждого объекта были зарезервированы дефолтные значения.
Однако потом прочитал, что использование __proto__ - bad practice и вообще - оно deprecated.
Тогда я, тоже через цикл myDbs.dbsList.forEach сделал
var tempMyDb = new MyDb;
for (var key in tempMyDb) {
if (item.hasOwnProperty(key)) {continue;}
item[key]=tempMyDb[key];};
Таким образом, каждый объект из массива получил недостающие свойства как собственные (hasOwnProperty), а не в его прототипе.
Причём
var tempMyDb = new MyDb;
я загнал в цикл forEach сознательно, чтобы у каждого item была своя ссылка на отдельный объект, и ещё один
var tempMyDb = new MyDb;
после всех циклов, чтобы разрушить связь.
Потому что, в противном случае, действие
myDbs.dbsList.forEach(function(item,i){
if (i==0) {item.objStoreList.push('Settings','Pettings', 'Elems')}
});
почему-то меняло свойство не только у item[0], но и у всех объектов, получивших ссылку на это свойство.
В общем, мне самому не нравится, так как никакого наследования у меня не получается, что-то с иерархией не то.
Хочется ведь, чтобы каскад был направлен в одну сторону - меняя св-во в конструкторе (или в прототипе, или ещё где), я меняю у всех наследников, а если меняю у наследника - ничего не должно влиять на родителей или братьев.
Собственно, вопрос звучит так, наверное: хотелось бы привязать заданные литерально объекты к определённому конструктору, чтобы менять свойства и методы централизованно и каскадно (если будет цепочка наследования).
Простите за сумбур, JS - мой первый язык программирования, и на начальной стадии.
P.S.: пока писал всё это, подумал, что м.б. будет правильно каждый элемент в массиве подменять объект new MyDb, через tempVar заменив дефолтные значения на уже имеющиеся? Т.о., они все будут привязаны к конструктору MyDb и сохранят то, что имеют.
Дело в том, что помимо вложенности по наследованию тут предполагается ещё и вложенность объектов по сути
myDbs.dbsList[i].ObjStoreList[j].IndxList[k], у каждого из которых предполагается свой прототип(или конструктор).
P.P.S.: Спасибо тем, кто хотя бы прочёл
это.