07.11.2013, 08:00
|
Новичок на форуме
|
|
Регистрация: 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],
...
тогда все нормально... В чем проблема???
|
|
07.11.2013, 08:44
|
Новичок на форуме
|
|
Регистрация: 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". Почему они перебиваются вдруг?
У меня нельзя объявлять эти переменные в нужной функции... они должны быть доступны во всех, а запихивать их в каждую необходимую функцию - как то не правильно.
|
|
07.11.2013, 08:45
|
|
CacheVar
|
|
Регистрация: 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>
Брехня. Все работает...
|
|
07.11.2013, 11:50
|
Новичок на форуме
|
|
Регистрация: 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.
|
|
07.11.2013, 16:56
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от Shpion08
|
Ну а вы мои сообщения внимательно прочтите...
|
Ну глуп, Ваше Сиятельство, глуп...
Сообщение от Shpion08
|
Вот так не работает!
|
Так оно так и не должно работать...
Сообщение от Shpion08
|
после delphi и c++
|
А там "внутренние" переменные видят все остальные функции и процедуры?
|
|
08.11.2013, 07:05
|
Новичок на форуме
|
|
Регистрация: 07.11.2013
Сообщений: 5
|
|
там можно сделать родительский класс и от него унаследовать другие...
Ну или просто все объединить в 1 класс и функции манипулирующие с переменными данного класса будут работать нормально!
|
|
08.11.2013, 07:39
|
|
Профессор
|
|
Регистрация: 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...
__________________
В личку только с интересными предложениями
|
|
09.11.2013, 09:06
|
Новичок на форуме
|
|
Регистрация: 07.11.2013
Сообщений: 5
|
|
охты, интересненько) спасиб!
|
|
09.11.2013, 11:22
|
|
Профессор
|
|
Регистрация: 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 не дает возможности унаследовать свойства. Это можно сделать только через вызов родительского конструктора. А конструктор помимо установки свойств может делать нежелательные действия.
__________________
В личку только с интересными предложениями
|
|
|
|