Прототип от прототипа
Всем привет! Не получается присоединить прототип к прототипу.
Допустим, у нас есть объект Slide,у которого есть метод num(номер). var sliderMain = document.getElementById('slider-main'); var Slide = function(derection){ this.dom = sliderMain.querySelectorAll('.slide_' + derection); }; Slide.prototype.num = function(number){ return this.dom[number-1]; }; var slideL = new Slide('left'); slideL.num(1); Далее, я бы хотел присоединить еще один метод, к полученному объекту (slideL.num(1)), который бы вытаскивал из этого объекта его zIndex. Как я это представляю: slideL.num(1).zIndex; Slide.prototype.zIndex = function(){ return (this.style.zIndex == "" ? getComputedStyle(this, '').zIndex : this.style.zIndex); }; Но тут я натыкаюсь на то, что this = undefiend. Помогите решить проблему и понять до конца прототипирование) Заранее спасибо! |
hellbeast92, для этого нужно возвращать либо свой объект либо, писать свойство zIndex прям в ДОМ объект.
Slide.prototype.num = function(number){ var obj = this.dom[number-1] obj.zIndex = this._zIndex(obj); return obj; }; Slide.prototype._zIndex = function(obj){ return (obj.style.zIndex == "" ? getComputedStyle(obj, '').zIndex : obj.style.zIndex); }; |
Спасибо! очень помогли, но встал один вопрос. как будет правильней сделать (не увервен что есть разница, но мало-ли я не вижу каких-то важных моментов...):
1) использовать ваш вариант или.. 2) вместо прототипной функции _zIndex илпользовать обычную функцию, к примеру: var fzIndex = function(obj){ return (obj.style.zIndex == "" ? getComputedStyle(obj, '').zIndex : obj.style.zIndex); }; и тогда вместо obj.zIndex = this._zIndex(obj);используем obj.zIndex = fzIndex(obj); |
Slide.prototype.num = function(number){ var obj = this.dom[number-1] obj.zIndex = _zIndex(obj); return obj; }; function _zIndex(obj){ return (obj.style.zIndex == "" ? getComputedStyle(obj, '').zIndex : obj.style.zIndex); }; |
Неужели такая большая разница:
obj.style.zIndexvs obj.zIndex :blink: ...ищете приключений на свою задницу... |
Разница в том, что obj.style.zIndex возращает, только тот z-index, который прописан в теге, а если они прописан в css, то мы ег оне получим
|
Ок.
obj.zIndex vs getComputedStyle(obj).zIndex Я бы предпочел второе, ибо оно всегда актуально и не выглядит неестественным. |
В чем то согласен, но в данном случае я стараюсь изучить синтаксис и возможности прототипирования, методах и тп.
в итоге у меня получился след код var Slide = function(derection){ this.dom = sliderMain.querySelectorAll('.slide_' + derection); }; Slide.prototype.num = function(number){ var obj = this.dom[number-1]; obj.zIndex = window.getComputedStyle ? getComputedStyle(obj, '').zIndex : obj.currentStyle.zIndex; return obj; }; Ладно, возник следующий вопрос как мне воплотить вот такой код: slideL.num(i).zIndex = 21; то, есть у меня не работает присваивание. |
hellbeast92, тут все зависит от браузеров которые должны использоваться, нужно либо использовать метод, либо использовать дескрипторы http://learn.javascript.ru/descripto...рипторы
Цитата:
|
Часовой пояс GMT +3, время: 14:04. |