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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция типа format (C#) 
:(
    Опции темы
Wanderer2019
Дата 17.2.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

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



Хочу написать свою функцию для работы со строками, по образу функции format объекта String из .NET.

пишу следующее:

Код

String.prototype.format = function() {
        var string = this;
        var i=0;

        if (typeof(this) == "function") {
            string = arguments[0];
            i++;
        }

        for (; i < arguments.length; i++)
            string = string.replace(/\{\d+?\}/, arguments[i]);

        return string;
    }


при вызове вылетает ошибка типа:
Cannot modify a property of a sealed object: format. 

С чем такое может быть связано?


Это сообщение отредактировал(а) Wanderer2019 - 17.2.2010, 17:07
PM ICQ MSN   Вверх
EmilRegis
Дата 17.2.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 4



может стоит назвать подругому?)
PM MAIL   Вверх
Wanderer2019
Дата 17.2.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

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



EmilRegis, 
результат тот же
PM ICQ MSN   Вверх
Amphiluke
Дата 17.2.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



У меня ни в одном браузере не пишется об ошибках.
Только что-то непонятно регулярное выражение. Сочетание «+?» в регулярном выражении вроде как должно отменять «жадность» алгоритма, но в контексте именно этого регулярного выражения /\{\d+?\}/ данное сочетания мне непонятно.  smile  Что вы хотели этим достичь?

PM   Вверх
Amphiluke
Дата 17.2.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



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

Короче, вместо 
Цитата(Wanderer2019 @  17.2.2010,  20:07 Найти цитируемый пост)
Код

String.prototype.format = function() {


сделайте
Код

String.format = function() {


и тогда можно вызывать этот метод, как в C#
Код

alert(String.format("Lorem {1} dolor {2} amet", "ipsum", "sit"));

PM   Вверх
12345c
Дата 17.2.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



1) typeof(this) [никогда не может быть]== "function", потому что это String (даст String или Object).
2) ошибка на строчке 11 - попытка модифицировать объект (не его свойства).

Добавлено через 3 минуты и 45 секунд
Наверное, Вы хотели сделать 
Код

  var string = "" + this; // или =this.toString() -- значение объекта



--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Amphiluke
Дата 17.2.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



Если делать метод format методом класса, то тогда typeof(this) будет именно "function"
Вот полный рабочий пример.
Код

String.format = function() {
        var string = this;
        var i=0;

        // alert(typeof this);
        if (typeof(this) == "function") {
            string = arguments[0];
            i++;
        }

        for (; i < arguments.length; i++)
            string = string.replace(/\{\d+\}/, arguments[i]);

        return string;
    }
     
    alert(String.format("Lorem {1} dolor {2} amet", "ipsum", "sit"));

Видимо, автор топика подразумевал именно это, раз в .NET метод format тоже вроде бы вызывается как метод класса.

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


 




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


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

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