Неправильная передача объекта в массиве
При работе с "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], ... тогда все нормально... В чем проблема??? |
Так... не в этом месте теперь ошибка...
function run_up () { var doc = document, T=doc.getElementById('iType').selectedIndex, S=doc.getElementById('iSpan').value, iType = [0, T], iSpan = [0, S], ... только на этой стадии все норм работает, а далее... если мы из другой функции запросим эти массивы... (в этом же модуле) то получим не значения, а опять же объекты "input" и "select". Почему они перебиваются вдруг? У меня нельзя объявлять эти переменные в нужной функции... они должны быть доступны во всех, а запихивать их в каждую необходимую функцию - как то не правильно. |
Цитата:
<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> Брехня. Все работает... :D |
Цитата:
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... где нет элементарно - классов - короче попа это :( ) |
Цитата:
Цитата:
Цитата:
|
там можно сделать родительский класс и от него унаследовать другие...
Ну или просто все объединить в 1 класс и функции манипулирующие с переменными данного класса будут работать нормально! |
Цитата:
/** * @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... |
охты, интересненько) спасиб!
|
Я написал одно, а код делает другое. Вот код, где прототипом является экземпляр другого "класса":
/** * @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 не дает возможности унаследовать свойства. Это можно сделать только через вызов родительского конструктора. А конструктор помимо установки свойств может делать нежелательные действия. |
Часовой пояс GMT +3, время: 14:03. |