Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Наследование классов классами (https://javascript.ru/forum/misc/63181-nasledovanie-klassov-klassami.html)

shokoMoko 22.05.2016 14:35

Наследование классов классами
 
Всем привет! Помогите пожалуйста разобрать примерчик. В общем есть класс-родитель к примеру:
function gtClassName(){
this.arg = null;
this.GetClass = document.getElementsByClassName(this.arg);
}
Так же есть класс наследник:

function gtClassButtons(cls){

gtClassName.call(this);
this.arg = cls;
}
Суть вопроса в том , что при создании объекта и при попытке вывести его содержание через консоль на вызоде можно увидеть следующее:
gtClassButtons {arg: "B", GetClass: HTMLCollection[0]}GetClass: HTMLCollection[0]arg: "B"__proto__: Object
Аргумент класса наследника меняется на 'B' , но getElementByClassName не вытягивает классы с html

Bond 22.05.2016 21:47

shokoMoko,
Так и есть - потому что в this.GetClass класса gtClassButtons записывается не выражение а результат выполнения в нашем случае - document.getElementsByClassName(null), потому что Вы сначала выполняете this.GetClass = document.getElementsByClassName(this.arg) в то время когда this.arg = null, а потом задаете для this.arg = cls; и больше ничего не делаете.
Это тоже самое если бы вы делали так
var a = 3;
var b = 2 + a;
a = 5; // И после переопределения переменной а ожидаете что b будет равно не 5, а 7;

А для того что бы получить желаемый результат надо переопределить свойство this.GetClass
function gtClassButtons(cls){

gtClassName.call(this);
this.arg = cls;
this.GetClass = document.getElementsByClassName(this.arg);
}


Часовой пояс GMT +3, время: 00:11.