Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пользовательский объект и его методы, Метод не выдает то что нужно 
V
    Опции темы
Georg4
Дата 13.5.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Ребята, кто тут в JS рубит.
Подскажите, плиз.

Создал свой объект со строкой на входе

И метод создать хочу который на входе имел бы число и выдавал бы букву по номеру этого числа из строки объекта. Грубо говоря выполнял бы charat

Да вот что-то не очень оно выдаёт
Код выглядит вот так

Код


var WrongIndexError = new Error("Íåâåðíûé èíäåêñ");
var re;
var result;


function WordString(s)
{
this.length = s.length;
this.content = s;

//this.letterIndex = letterInWordIndex;

this.letterAt = function() 
{
var st;
try
{
re = new RegExp("[0-9]"); 
result = re.test(i); 
if (result===false) {throw WrongIndexError;}
else if (i<0) { throw WrongIndexError;}
else if (i> length(s)) { throw WrongIndexError;}

else  {

st = s.charat(i);
return (st);
      }
}
catch (e)
{ if (e==WrongIndexError)
{ alert("Îøèáêà " + e.description );
//return (null);
}
}
}


потом пытаюсь вызвать 
var str= prompt("Ââåäèòå ñòðîêó","");
wst = new WordString(str);
alert(wst.letterAt(2));

Алерт выходит с undefinit

В JS я не очень, код писал больше по наитию и что смог вычитать про объекты пользовательские и обработку ошибок...но никак я не могу понять как методу передать эту исходную строку объекта и правильно её вывести

Это сообщение отредактировал(а) Georg4 - 13.5.2010, 18:14


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Amphiluke
Дата 13.5.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Цитата(Georg4 @  13.5.2010,  22:12 Найти цитируемый пост)
result = re.test(i); 

Что-то я не вижу, где у вас объявляется переменная i. Если это параметр метода, то куда он потерялся из списка аргументов? 

* * *


Кстати, метод charAt пишется с большой «A»

Это сообщение отредактировал(а) Amphiluke - 13.5.2010, 19:48
PM   Вверх
Georg4
Дата 13.5.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



i действительно параметр....
просто раньше он был отдельно функцией,
Код

function letterAtIndex(i)
{
var st;
try
{
re = new RegExp("[0-9]"); 
result = re.test(i); 
if (result===false) {throw WrongIndexError;}
else if (i<0) { throw WrongIndexError;}
else if (i> length(s)) { throw WrongIndexError;}

else  {

st = s.charat(i);
return (st);


}
  
}
catch (e)
{ if (e==WrongIndexError)
{ alert("Îøèáêà " + e.description );
}
}
}


 это я его сейчас, для удобства, внёс в тело метода.

charAt это тоже после того как перенёс, не так переписал...в целом. как бы там ни было.
Что не так?
Есть ли что-то, отчего этот самый Алерт выбрасывается со значением undefined ?


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Georg4
Дата 14.5.2010, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



У меня есть большое подозрение.
Особенно после того как я запустил скрипт в дебаггере free JavaScript editor`а
Что в таком варианте
Код

function letterAtIndex(i)
{
var st;
try
{

re = new RegExp("[0-9]"); 
result = re.test(i); 
if (!result) {throw WrongIndexError;}
else if (i<0) { throw WrongIndexError;}
else if (i> length(s)) { throw WrongIndexError;}

else  {

st = s.charAt(i);
return (st);


}
  
}
catch (e)
{ if (e==WrongIndexError)
{ alert("Ошибка " + e.description );
}
}
}


function WordString(s)
{
this.length = s.length;
this.content = s;

this.letterIndex = letterInWordIndex;
this.letterAt = letterAtIndex;

try
{

re = new RegExp("[А-Яа-я]","i"); 
re2 =new RegExp("[а-я]",""); 
result = re.test(s[0]); 

for (i=1 ;i<s.length ;i++ )
{
result2 = re2.test(s[i]);
if (!result2) {throw WrongWordError;
}
}

if (!result) {throw WrongWordError;}
else { length=s.length;
content=s; 
return (s);}
}
catch (e)
{
if (e==WrongWordError) 
    {
alert("Ошибка " + e.description );
s.length=0;
s.content="";
return (s);
    }
}
}
var str= prompt("Введите строку","");
wst = new WordString(str);

alert(wst.letterAt(2));


параметр s после создания объекта 
wst = new WordString(str);

просто обнуляется.
Соответственно бери какой угодно s.charAt(i);
он всё равно выдаст ноль...

Это только догадки, и как передать это значение параметра s объекта WordString методу этого же объекта я не понимаю тут.


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Amphiluke
Дата 14.5.2010, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Цитата(Georg4 @  14.5.2010,  04:27 Найти цитируемый пост)
else if (i> length(s))

Где определена функция length?  smile 

Вот ваш первый вариант. Исправленный
Код

var WrongIndexError = new Error("error decription");
var re;
var result;


function WordString(s) {
    this.length = s.length;
    this.content = s;
    //this.letterIndex = letterInWordIndex;
    this.letterAt = function(i) {
        var st;
        try {
            re = new RegExp("[0-9]"); 
            result = re.test(i);
            if (result===false) {throw WrongIndexError;}
            else if (i<0) { throw WrongIndexError;}
            else if (i> this.content.length) { throw WrongIndexError;}
            else {
                st = this.content.charAt(i);
                return (st);
            }
        } catch (e) {
            if (e==WrongIndexError) { alert("Ошибка " + e.description ); /*return (null);*/}
        }
    }
}
var str= prompt("Введите строку","");
wst = new WordString(str);
alert(wst.letterAt(2));


PM   Вверх
Georg4
Дата 14.5.2010, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Всё понял, большое спасибо!


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.