Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2013, 11:41
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

Прототип от прототипа
Всем привет! Не получается присоединить прототип к прототипу.

Допустим, у нас есть объект 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, 06.12.2013 в 11:46.
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2013, 14:30
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

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);
};
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 08.12.2013, 21:24
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

Спасибо! очень помогли, но встал один вопрос. как будет правильней сделать (не увервен что есть разница, но мало-ли я не вижу каких-то важных моментов...):
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);
Ответить с цитированием
  #4 (permalink)  
Старый 08.12.2013, 21:35
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

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);
};
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #5 (permalink)  
Старый 09.12.2013, 04:23
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Неужели такая большая разница:
obj.style.zIndex
vs
obj.zIndex




...ищете приключений на свою задницу...
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 09.12.2013, 12:57
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

Разница в том, что obj.style.zIndex возращает, только тот z-index, который прописан в теге, а если они прописан в css, то мы ег оне получим
Ответить с цитированием
  #7 (permalink)  
Старый 09.12.2013, 14:13
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ок.
obj.zIndex
vs
getComputedStyle(obj).zIndex

Я бы предпочел второе, ибо оно всегда актуально и не выглядит неестественным.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 10.12.2013, 13:19
Интересующийся
Отправить личное сообщение для hellbeast92 Посмотреть профиль Найти все сообщения от hellbeast92
 
Регистрация: 08.10.2013
Сообщений: 12

В чем то согласен, но в данном случае я стараюсь изучить синтаксис и возможности прототипирования, методах и тп.

в итоге у меня получился след код
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;

то, есть у меня не работает присваивание.
Ответить с цитированием
  #9 (permalink)  
Старый 10.12.2013, 13:36
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

hellbeast92, тут все зависит от браузеров которые должны использоваться, нужно либо использовать метод, либо использовать дескрипторы http://learn.javascript.ru/descripto...рипторы
Цитата:
поддерживаются всеми современными браузерами, исключая IE<9, Opera<12, Safari<5.1.4.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение свойств прототипа FanAizu Общие вопросы Javascript 5 23.08.2013 21:13
Есть ли разумное объяснение столь чрезмерной сложности наследования в js? father_gorry Общие вопросы Javascript 42 16.04.2013 15:56
Унаследованный метод не вызывается из прототипа. Алексей Р. Общие вопросы Javascript 2 07.01.2013 00:31
Какой прототип у элементов DOM Раед Events/DOM/Window 4 18.03.2012 15:37
var вместо this в определении прототипа micscr Общие вопросы Javascript 1 10.09.2009 13:36