Показать сообщение отдельно
  #5 (permalink)  
Старый 29.12.2014, 13:49
Интересующийся
Отправить личное сообщение для ssadfaf Посмотреть профиль Найти все сообщения от ssadfaf
 
Регистрация: 28.12.2014
Сообщений: 20

Мне сегодня снились прототипы...
Спасибо Вам всем за отклик.
В обратном порядке:
Erolast, сенкс за ссылки, добавил в букмаркс. Последнюю, правда, уже читал.
Насчёт jQuery и прочего - мне ещё чистый JS изучать и изучать. Эти библиотеки прекрасны, но есть опасность, получив их неограниченные возможности и не разбравшись в основах, тупо фигачить по шаблонам и примерам, пока не упрешься в какую-нибудь проблему, которую ты и сформулировать-то не сможешь. Вот как сейчас, например.
Касательно ES6 - а как скоро он будет имплементирован в webkit Android? По моей задумке хочу сделать себе лайтового универсального помощника на ПК и Андроид (от 4.4, чтобы с поддержкой indexeddb и HTML5). Посмотрел на в таблицы совместимости через MDN - setPrototypeOf и Object.assign пока как-то не очень с мобильными платформами.
Но за надежду на лучшее - сенкс.

krutoy, я, наверное, сильно переврал Ваш код, но у меня не получилось. Я пока во всяких this плаваю, как топор.
Вот мои конструктор и расширитель:
var MyDb11111 = function (x3) {
   extend(x3, this);
   return this;
}
MyDb11111.prototype.name='nameFromPrototype';
MyDb11111.prototype.objStList=['objStListFromPrototype0', 'objStListFromPrototype1'];
MyDb11111.prototype.origin='originFromPrototype';
MyDb11111.prototype.destination='destinationFromPrototype';

var	extend=function(src, trg){for(var key in src) trg[key]=src[key]};
А вот тестовая функция:
function TestPest242() {
var myDbs = {dbsList:[{name:'CoreDb',origin:'zz_core'},{name:'Misc'},{name:'BkMrks',destination:'stayHere', objStList:['Hrefs']}],up2Date:TS22().TimeStamp};
for(var key in myDbs.dbsList) myDbs.dbsList[key]=new MyDb11111(myDbs.dbsList[key]);
var testMyDb = new MyDb11111; // (1) тест на возможность создания нового объекта
myDbs.dbsList.push(testMyDb); // (2) тест на возможность добавления нового объекта
MyDb11111.prototype.newProperty='newPropertyFromPrototype'; // (3)  тест на возможность добавления нового свойства для всех объектов
myDbs.dbsList.forEach(function(item,i){ // тесты:
if (i==0) {item.objStList.push('Settings','Pettings', 'Elems');}; // (4) нет своих, push новых
if (i==1) {item.objStList.push('Elems1')}; // (5) нет своих, push новых
if (i==1) {item.origin = 'MiscJSON'};  // (6) нет своих, создание новых
if (i==2) {item.objStList.push('Elems2')}; // (7) есть свои,  push новых
if (i==2) {item.destination = 'zz_core'};  // (8) есть свои, изменение значения
if (i==3) {item.objStList.push('Elems3')}; // (9) нет своих, push новых
if (i==3) {item.newProperty = 'propertyNext'}; // (10) нет своих, создание новых
});
myDbs.dbsList.forEach(function(item,i){
console.log("  i    " +   i    );
for (var key in item) {console.log(' ownProp: ' +  item.hasOwnProperty(key) +' >>> '+ key + " = " + item[key]  );}});}
Консоль:
i    0
ownProp: true >>> name = CoreDb
ownProp: true >>> origin = zz_core
ownProp: false >>> objStList = objStListFromPrototype0,objStListFromPrototype1,Settings,Pettings,Elems,Elems1,Elems3
ownProp: false >>> destination = destinationFromPrototype
 ownProp: false >>> newProperty = newPropertyFromPrototype
i    1
ownProp: true >>> name = Misc
ownProp: true >>> origin = MiscJSON
ownProp: false >>> objStList = objStListFromPrototype0,objStListFromPrototype1,Settings,Pettings,Elems,Elems1,Elems3
ownProp: false >>> destination = destinationFromPrototype
ownProp: false >>> newProperty = newPropertyFromPrototype
 i    2
ownProp: true >>> name = BkMrks
ownProp: true >>> destination = zz_core
ownProp: true >>> objStList = Hrefs,Elems2
ownProp: false >>> origin = originFromPrototype
ownProp: false >>> newProperty = newPropertyFromPrototype
 i    3
ownProp: true >>> newProperty = propertyNext
ownProp: false >>> name = nameFromPrototype
ownProp: false >>> objStList = objStListFromPrototype0,objStListFromPrototype1,Settings,Pettings,Elems,Elems1,Elems3
ownProp: false >>> origin = originFromPrototype
ownProp: false >>> destination = destinationFromPrototype
Собственно, большинство тестов пройдены успешно, кроме главных.
Например, при наличии своего свойства-массива
// (7) есть свои, push новых
всё происходит правильно.
А вот если
// (4), (5), (9) нет своих, push новых
то в них происходит тупо добавление в прототип с искажением всего массива.
Есть предположение, что это как-то связано с тем, что массив - сам по себе объект и JS оперирует ссылками вместо примитивов, о чём предупреждалось в примере с хомяками с общим животом, но моего понимания всех связей ещё очень недостаточно.
ЧЯДНТ?

Последний раз редактировалось ssadfaf, 29.12.2014 в 13:53.
Ответить с цитированием