Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2013, 08:00
Новичок на форуме
Отправить личное сообщение для Shpion08 Посмотреть профиль Найти все сообщения от Shpion08
 
Регистрация: 07.11.2013
Сообщений: 5

Неправильная передача объекта в массиве
При работе с "input" и "select" столкнулся с проблемой получения их свойств, если свойства запрашиваются из массива.

var doc = document,
	iType = [0, (doc.getElementById('iType').selectedIndex)],
	iSpan = [0, doc.getElementById('iSpan').value],
	...


В общем в iType передается целиком объект "Select" с id='iType', причем перебивает весь массив iType! (с input тоже самое, запрос свойства игнорирует)
А если так:
var doc = document,
	T=doc.getElementById('iType').selectedIndex,
	S=doc.getElementById('iSpan').value,
	iType = [0, T],
	iSpan = [0, S],
	...

тогда все нормально... В чем проблема???
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2013, 08:44
Новичок на форуме
Отправить личное сообщение для Shpion08 Посмотреть профиль Найти все сообщения от Shpion08
 
Регистрация: 07.11.2013
Сообщений: 5

Так... не в этом месте теперь ошибка...
function run_up () {
var doc = document,
	T=doc.getElementById('iType').selectedIndex,
	S=doc.getElementById('iSpan').value,
	iType = [0, T],
	iSpan = [0, S],
	...

только на этой стадии все норм работает, а далее... если мы из другой функции запросим эти массивы... (в этом же модуле) то получим не значения, а опять же объекты "input" и "select". Почему они перебиваются вдруг?

У меня нельзя объявлять эти переменные в нужной функции... они должны быть доступны во всех, а запихивать их в каждую необходимую функцию - как то не правильно.
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2013, 08:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от Shpion08
В чем проблема?
Бивас, тест! (с)

<select id='iType'>
	<option></option>
	<option selected>1</option>
	<option>2</option>
</select>
<input type='text' id='iSpan' value='test' />
<script type="text/javascript">
var 
	doc = document,
	iType = [0, doc.getElementById('iType').selectedIndex],
	iSpan = [0, doc.getElementById('iSpan').value]
	alert(iType[1]);
	alert(iSpan[1]);
</script>

Брехня. Все работает...
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2013, 11:50
Новичок на форуме
Отправить личное сообщение для Shpion08 Посмотреть профиль Найти все сообщения от Shpion08
 
Регистрация: 07.11.2013
Сообщений: 5

Сообщение от ksa Посмотреть сообщение
Бивас, тест! (с)
Брехня. Все работает...
Ну а вы мои сообщения внимательно прочтите... я и писал что в 1 функции работает (как у вас), а если в разных... то нет!
function run_up () {
var doc = document,
    iType = [0, doc.getElementById('iType').selectedIndex],
    iSpan = [0, doc.getElementById('iSpan').value],
    };
function run(){
run_up();
alert(iType[1]);
alert(iSpan[1]);
}

Вот так не работает!

Или я тут их делаю privat а не global ?) но тогда каким макером мне их сделать глобальными? они должны записываться только по запросу... вытаскивать их в отдельный js ?

PS. сори если туплю, но javascript я изучаю можно сказать третий день только) (после delphi и c++ на javascript... где нет элементарно - классов - короче попа это )

Последний раз редактировалось Shpion08, 07.11.2013 в 12:07.
Ответить с цитированием
  #5 (permalink)  
Старый 07.11.2013, 16:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от Shpion08
Ну а вы мои сообщения внимательно прочтите...
Ну глуп, Ваше Сиятельство, глуп...

Сообщение от Shpion08
Вот так не работает!
Так оно так и не должно работать...

Сообщение от Shpion08
после delphi и c++
А там "внутренние" переменные видят все остальные функции и процедуры?
Ответить с цитированием
  #6 (permalink)  
Старый 08.11.2013, 07:05
Новичок на форуме
Отправить личное сообщение для Shpion08 Посмотреть профиль Найти все сообщения от Shpion08
 
Регистрация: 07.11.2013
Сообщений: 5

там можно сделать родительский класс и от него унаследовать другие...
Ну или просто все объединить в 1 класс и функции манипулирующие с переменными данного класса будут работать нормально!
Ответить с цитированием
  #7 (permalink)  
Старый 08.11.2013, 07:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Shpion08
там можно сделать родительский класс и от него унаследовать другие...
Ну а в JS можно сделать прототипом конструктора экземпляр другого конструктора, что и будет являться наследованием:

/**
 * @constructor
 */
function A() {
    this.foo = 'abc';
}
A.prototype.bar = function() {

};

/**
 * @constructor
 * @inherits A
 */
function B() {
  // вызываем конструктор A
  A.call(this);
  // теперь имеем this.foo =  'abc'
}

// Прототипом для объектов B будет новый объект, основанный на (имеющим прототипом) прототипе конструктора A
// вторым агрументом восстанавливаем свойство constructor
B.prototype = Object.create(A.prototype, {
    constructor: {value: B}
});
// теперь при вызове конструктора будем иметь this.bar = function...
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2013, 09:06
Новичок на форуме
Отправить личное сообщение для Shpion08 Посмотреть профиль Найти все сообщения от Shpion08
 
Регистрация: 07.11.2013
Сообщений: 5

охты, интересненько) спасиб!
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2013, 11:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я написал одно, а код делает другое. Вот код, где прототипом является экземпляр другого "класса":

/**
 * @constructor
 */
function A() {
    this.foo = 'abc';
}
A.prototype.bar = function() {
 
};
 
/**
 * @constructor
 * @inherits A
 */
function B() {
}
 
// Прототипом для объектов B будет экземпляр A
B.prototype = new A;


Это часто используется, однако свойства, созданные в A, будут в прототипе B, а значит общими для всех экземпляров B. Плюс, вызов конструктора A не всегда требуется.

Вообще же, JS не дает возможности унаследовать свойства. Это можно сделать только через вызов родительского конструктора. А конструктор помимо установки свойств может делать нежелательные действия.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача координат объекта из 1С в JavaScript Kuklachel Events/DOM/Window 1 03.06.2013 18:56
передача объекта через параметр функции PHP zhurchik Серверные языки и технологии 1 06.12.2012 15:24
Несколько событий(onmouseover), одна функция. Передача объекта события. IDCh Javascript под браузер 4 29.08.2012 16:35
Передача полю объекта - массиву, значения элемента через set метод poorking Общие вопросы Javascript 1 13.02.2011 20:22
Передача объекта в ajax -> success tazododu AJAX и COMET 4 05.11.2010 18:46