Наследование классов классами
Всем привет! Помогите пожалуйста разобрать примерчик. В общем есть класс-родитель к примеру:
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 |
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); } |
shokoMoko,
function A() { this.x1 = arguments[0]; this.x2 = document.getElementsByClassName(arguments[0]); } function AA(x1) { A.apply(this, arguments); this.x3 = 'x3'; } function AAA(x1, x4) { AA.apply(this, arguments); this.x4 = x4; } |
Часовой пояс GMT +3, время: 08:37. |