Прототипное наследование. Лохотрон.
// представьте что у вас есть некий объект:
var a = {
w : ['a', 'h', 't', ' ', 't', 'h', 'e'],
f : [
{ u : 'c',
k : '?'
}
]
};
// и вам надо произвести какие-то страшные манипуляции с его данными,
// при этом не повредив его, потому что, допустим, он очень дорог вам,
// и вы любите его всей душой.
// Вы делаете потомка, с которым не страшно делать все что угодно:
var b = Object.create(a);
// и делаете свои грязные делишки:
b.w.splice(0, b.w.length);
delete b.f[0].u;
delete b.f[0].k;
// вопрос — что теперь с вашим любимым 'a' ?
alert(JSON.stringify(a, null, 4));
Я понимаю что происходит и почему, но ведь это же НЕПРАВИЛЬНО! Какое же это наследование? |
Цитата:
в том и мастерство программиста, чтобы обходить недостатки и пользоваться достоинствами например в данном случае можно поискать библиотеку для эмуляции "классического" наследования ну или можно найти другой язык или вообще все бросить :) |
Цитата:
И вообще, я ж не жалуюсь, я просто предупредить, может кто не знает. Такое поведение совсем не интуитивно, и я долго искал где ошбся, прежде чем понял, что ошибся, вроде как, и не я =) |
Так это не бага, а фича!
Если фича не нужна, юзаем Object.freeze() |
Цитата:
|
| Часовой пояс GMT +3, время: 05:05. |