Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

38_JavaScript: хитрости (Дмитрий Котеров)
Goto page Previous  1, 2
Author Message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Thu Dec 29, 2005 10:54 am (написано за 1 секунду)
   Post subject:
Reply with quote

Дмитрий Котеров
Вчера WingedFox отправил меня почитать Ваши наблы 39 и 40. С огромным интересом прочел статьи. Многое еще мне предстоит осмыслить по одной простой причине - во всем этом я новичок. Тем не менее, я все же набрался храбрости и решил обратить Ваше внимание на листинг 7 в набле 39. Осмелюсь предположить, что листинг 8 был бы лишь дополнительным вариантом, если листинг 7 выглядел следующим образом:

function create(number) {
  var arr = [];
  for (var i=1; i<number; i++) {
    arr[i] = new Function("alert("+i+"*"+i+")");
  }
  return arr;
}

Могли бы Вы прокомментировать мои предположения? Если да, то подробней, пожалуйста (напомню - я новичок)...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Dec 29, 2005 11:30 am (спустя 36 минут; написано за 1 минуту 15 секунд)
   Post subject:
Reply with quote

AKS wrote:
new Function("alert("+i+"*"+i+")");
Это плохое решение, потому что оно, по сути, прибегает к eval (неявно). Оно более медленное, более громоздкое синтаксически и более подвержено опасностям (это хорошо, что у Вас i - целое число, а если была бы строка, к тому же могущая содержать в себе кавычки и апострофы? что бы Вы стали делать?).
Back to top
View user's profile Send private message Send e-mail
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Thu Dec 29, 2005 12:30 pm (спустя 1 час; написано за 1 минуту 23 секунды)
   Post subject:
Reply with quote

Дмитрий Котеров
Спасибо, понял (точнее, пока не совсем все понял)! Буду учиться дальше, надеюсь с Вашей помощью...
Back to top
View user's profile Send private message Send e-mail
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Thu Dec 29, 2005 4:52 pm (спустя 4 часа 21 минуту; написано за 10 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Скажите, Дмитрий, если, конечно у Вас найдется минутка-другая, а вот если только целочисленное значение передается во вновь создаваемую функцию, то это будет не таким плохим решением? И еще, объясните мне, как новичку, в какой момент вызывается функция eval()? Заранее благодарен.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Dec 29, 2005 5:03 pm (спустя 10 минут; написано за 54 секунды)
   Post subject:
Reply with quote

eval - это обозначение компиляции кода во внутреннее представление. Соответственно, создадите 1000 функций - будет 1000 раз проводиться компиляция, а это очень ресурсоемкий процесс. А если использовать замыкания, тогда компилируется все только один раз, а функции создаются уже по однотипному шаблону.
Back to top
View user's profile Send private message Send e-mail
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Thu Dec 29, 2005 7:33 pm (спустя 2 часа 29 минут; написано за 10 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Спасибо!
Back to top
View user's profile Send private message Send e-mail
Proger
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Jan 12, 2006 12:11 pm (спустя 13 дней 16 часов 38 минут; написано за 2 минуты 9 секунд)
   Post subject:
Reply with quote

Интересно узнать можно ли определить методы класса как protected, в аналогии с переменными,
и какова будет их область видимости.
Back to top
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Fri Jan 13, 2006 7:38 pm (спустя 1 день 7 часов 26 минут; написано за 1 минуту 3 секунды)
   Post subject:
Reply with quote

Proger
На этом форуме я наткнулся на ссылку www.crockford.com/, думаю там ты сможешь найти ответы на свои вопросы...
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Sun Jan 22, 2006 3:51 am (спустя 8 дней 8 часов 12 минут; написано за 2 минуты 58 секунд)
   Post subject:
Reply with quote

Proger
Protected - скойство видимое только наследниками класса.
Т.к. нормального наследования в JS нет, то тут и говорить не о чем.

На самом деле, такие свойства организовать можно, но делается это сильно извратным способом в в 95% случаев оно не нужно.
В теме Глобальные переменные и контексты в JavaScript. (forum.dklab.ru/js/other/GlobalniePeremennieIKontekstiVJavascript.html) есть достаточно информации, чтобы разобраться.

AKS
Информация у Крокфорда уже несколько устарела.
Back to top
View user's profile Send private message
Г.О.
Участник форума



Joined: 22 Feb 2006
Posts: 378
Карма: 13
   поощрить/наказать

Location: Ленинград

PostPosted: Tue Jun 13, 2006 3:55 pm (спустя 4 месяца 22 дня 12 часов 4 минуты; написано за 3 минуты 39 секунд)
   Post subject:
Reply with quote

Прошу прощения, если я что-то не так понял, но я не совсем согласен с листингом 14 из 39-й статьи
www.dklab.ru/chicken/nablas/39.html#list14

Если создавать методы в конструкторе, то какой вообще тогда смысл у прототипов?
При том, как делает Mozilla в 13-м листинге создается одна функция, находящаяся в прототипе и доступная всем объектам созданным данным конструктором.
А в л.14, при создании нового объекта каждый раз будет создаваться новая функция, принадлежащая только ему.

Где тут Дзен? Или я в тему просто не попал?
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Tue Jun 13, 2006 4:09 pm (спустя 13 минут)
   Post subject:
Reply with quote

Г.О.
Вы сами и раскрыли этот Дзен, описав своими словами разницу между созданием объектов двумя способами. Если нужен один экземпляр, можно использовать вариант из л.14, если нужно несколько экземпляров - используем прототип.
Back to top
View user's profile Send private message Send e-mail
darkk
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Jul 17, 2006 5:45 pm (спустя 1 месяц 4 дня 1 час 36 минут; написано за 1 минуту 25 секунд)
   Post subject:
Reply with quote

А мне кажется или "Листинг 20" опять содержит ошибку?

darkk.net.ru/dklab-listing-20/test.html
Проверял под IE6 и Opera 7.54, в обоих случаях "title" в хэше выводится как undefined.
Back to top
darkk
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Jul 17, 2006 6:09 pm (спустя 24 минуты; написано за 33 секунды)
   Post subject:
Reply with quote

Помогло следующее:
- return
- s.split('\\').join('\\\\').split('"').join('\\"');
+ return s.split('\\').join('\\\\').split('"').join('\\"');
Back to top
ressash
Заглянувший



Joined: 22 Feb 2007
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Thu Feb 22, 2007 1:25 pm (спустя 7 месяцев 4 дня 19 часов 16 минут; написано за 5 минут 47 секунд)
   Post subject:
Reply with quote

это не ошибка. просто хочу обратить внимание на 2 момента:
1. следует иметь ввиду, что "листинг 20" возвращает только те свойства, которые принадлежат объекту (определены в конструкторе через this, а не через var). Говоря в разрезе ООП - возварщает только Public-свойства
2. если какое либо свойство объекта тоже является объектом (ссылается на конструктор, т.е. определено через "= new ..."), то он тоже "развернется" в код, что имхо не очень удобно. Лучше определять эту функцию как Object.prototype.dump, а не Object.prototype.toString, и для вывова использовать конструкции alert(myObj.dump()) и alert(myObj.mySubObj.dump())
Back to top
View user's profile Send private message Send e-mail
Joker
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Mar 23, 2007 2:11 pm (спустя 1 месяц 1 день 45 минут; написано за 2 минуты 7 секунд)
   Post subject:
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
Array.prototype.toString =
Object.prototype.toString = function() {
  var cont = [];
  var addslashes = function(s) {
    // Использовать replace НЕЛЬЗЯ - в Опере
    // происходит зацикливание, т.к. из replace
    // зачем-то вызывается Object.toString().
    return
      s.split('\\').join('\\\\').split('"').join('\\"');
  }
  for (var k in this) {
    if (cont.length) cont[cont.length-1] += ",";
    var v = this[k];
    var vs = '';
    if (v.constructor == String)
      vs = '"' + addslashes(v) + '"';
    else
      vs = v.toString();
ИМХО здесь строчки
Code (JavaScript): скопировать код в буфер обмена
if (this.constructor == Array)
      cont[cont.length]
        else
совсем не нужны
Code (JavaScript): скопировать код в буфер обмена
      cont[cont.length] = k + ": " + vs;
  }
  //
  cont = "  " + cont.join("\n").split("\n").join("\n  ");
  var s = cont;
  if (this.constructor == Object) {
    s = "{\n"+cont+"\n}";
  } else if (this.constructor == Array) {
    s = "[\n"+cont+"\n]";
  }
  return s;
}
Back to top
Майоров Павел
Участник форума



Joined: 18 Mar 2007
Posts: 22
Карма: 0
   поощрить/наказать


PostPosted: Fri May 04, 2007 3:59 pm (спустя 1 месяц 12 дней 1 час 48 минут; написано за 1 минуту 37 секунд)
   Post subject:
Reply with quote

Quote:
Кроме того, «просто функций» также не существует: любая функция является в действительности методом — либо указанного вами объекта, либо же объекта window (когда мы объявляем функцию как function F() {}).
А как же внутренние функции?
Code (JavaScript): скопировать код в буфер обмена
fuction f() {
  function g() {

  }
}
Здесь g не будет свойством никакого объекта.
Back to top
View user's profile Send private message
Г.О.
Участник форума



Joined: 22 Feb 2006
Posts: 378
Карма: 13
   поощрить/наказать

Location: Ленинград

PostPosted: Fri May 04, 2007 4:33 pm (спустя 33 минуты; написано за 29 секунд)
   Post subject:
Reply with quote

Она будет свойством объекта, привязанного к данному исполнительному контексту. Или как-то так.
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Fri May 04, 2007 7:10 pm (спустя 2 часа 37 минут; написано за 2 минуты 56 секунд)
   Post subject:
Reply with quote

Майоров Павел wrote:
Здесь g не будет свойством никакого объекта.
Будет.
Code (JavaScript): скопировать код в буфер обмена
//
function f(){
    return function g(){
        return this.location ? g : this}()();
}

//
alert(f().g);
По поводу "просто функций" можно спорить только в отношении безымянных функций:
Code (JavaScript): скопировать код в буфер обмена
// чей же это метод и кто его вызвал?
(function (){})();
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sat May 05, 2007 10:49 am (спустя 15 часов 38 минут; написано за 4 минуты 36 секунд)
   Post subject:
Reply with quote

Zeroglif
А почему "можно спорить" (т.е. о чем спорить)? Ведь при создании безымянных функций-выражений (согласно спецификации) не создается никаких св-в ни у каких объектов (просто потому, что нет идентификатора, который мог бы стать именем этого св-ва). Следовательно, такая функция не должна числиться среди методов какого-либо объекта (ничейная - "просто функция", значит).
Back to top
View user's profile Send private message Send e-mail
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Sat May 05, 2007 11:30 am (спустя 40 минут)
   Post subject:
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
(function(){alert('упс, похоже, я чей-то метод...')}).prototype.constructor();
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sat May 05, 2007 1:34 pm (спустя 2 часа 4 минуты; написано за 3 минуты 29 секунд)
   Post subject:
Reply with quote

Zeroglif
Нет, не понял. При чем здесь "чей-то метод"? Вызвана сама функция. Сами ведь писали (forum.dklab.ru/viewtopic.php?p=102575#102575):
Quote:
function A() {};
A.prototype.consructor //обратную ссылку на объект-конструктор;
P.S. Я хочу сказать, что возможность "обратиться" к функции через прототип, создаваемый вместе с функцией, не доказывает, что сама функция чей-то метод.
Back to top
View user's profile Send private message Send e-mail
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Sat May 05, 2007 2:18 pm (спустя 44 минуты; написано за 4 минуты 13 секунд)
   Post subject:
Reply with quote

AKS wrote:
не доказывает, что сама функция чей-то метод
Предлагаю положиться на терминологию EcmaScript:

1) function stored in a property of an object is called a method
2) method is a function associated with an object via a property

Выделенный жирным объект - это прототип, создаваемый в момент создания функции. У этого объекта есть свойство "constructor". Через это свойство с объектом ассоциирована функция. Отсюда согласно ES налицо метод.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sat May 05, 2007 2:51 pm (спустя 32 минуты; написано за 58 секунд)
   Post subject:
Reply with quote

Да, точно, так и есть!
Back to top
View user's profile Send private message Send e-mail
wisgest
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri May 18, 2007 2:52 pm (спустя 13 дней 1 минуту; написано за 2 минуты 30 секунд)
   Post subject: Набла 39, листинг 9
Reply with quote

В строках 4, 5 листинга (dklab.ru/chicken/nablas/39.html#list9) не должно быть круглых скобок после имён функций назначаемых методам - там ведь ссылки на функции, а не их вызовы.
Back to top
Майоров Павел
Участник форума



Joined: 18 Mar 2007
Posts: 22
Карма: 0
   поощрить/наказать


PostPosted: Wed Jun 06, 2007 5:46 pm (спустя 19 дней 2 часа 54 минуты; написано за 1 минуту 12 секунд)
   Post subject:
Reply with quote

А если сделать так?
Code (JavaScript): скопировать код в буфер обмена
function f() {
  function g(){}
  g.prototype = {} //g.prototype.constructor===Object
}
теперь чьим методом является g?
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Thu Jun 07, 2007 12:41 am (спустя 6 часов 54 минуты; написано за 6 минут 9 секунд)
   Post subject:
Reply with quote

Майоров Павел wrote:
спустя 19 дней
Медленно, но неуклонно... ;-)
Майоров Павел wrote:
теперь чьим методом является g
Так как налицо идентификатор (имя) функции, то это уже говорит о том, что это чьё-то свойство (метод). В данном случае функция g - метод специального недоступного нам объекта "variable object". Заодно, эта же функция в момент создания является методом объекта-прототипа (g.prototype.constructor), но так как вы сразу же переопределили объект-прототип, предыдущий теоретически уже ждёт своей кончины в отсутствии каких-либо ссылок на себя любимого, его мы уже достать никак не можем...
Back to top
View user's profile Send private message
Майоров Павел
Участник форума



Joined: 18 Mar 2007
Posts: 22
Карма: 0
   поощрить/наказать


PostPosted: Thu Jun 07, 2007 12:37 pm (спустя 11 часов 56 минут; написано за 1 минуту 15 секунд)
   Post subject:
Reply with quote

Если объект нам недоступен, значит, его как бы нет.
Отсюда следует, что любая функция является как бы методом некоторого как бы объекта...
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Thu Jun 07, 2007 1:25 pm (спустя 48 минут; написано за 11 секунд)
   Post subject:
Reply with quote

Майоров Павел wrote:
Если объект нам недоступен, значит, его как бы нет.
Философия.
Code (JavaScript): скопировать код в буфер обмена
// создали функцию и объект-прототип
function f(){};
// сконструировали новый объект
var obj = new f();
// переопределили свойство prototype
f.prototype = {};
// объект-прототип теперь недоступен? смотрим в gecko, метод это или же "как бы" метод?
alert(obj.__proto__.constructor);
Back to top
View user's profile Send private message
Майоров Павел
Участник форума



Joined: 18 Mar 2007
Posts: 22
Карма: 0
   поощрить/наказать


PostPosted: Thu Jun 07, 2007 1:29 pm (спустя 3 минуты; написано за 28 секунд)
   Post subject:
Reply with quote

вот этой строчки у меня не было...
Code (JavaScript): скопировать код в буфер обмена
var obj = new f();
Back to top
View user's profile Send private message
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Thu Jun 07, 2007 3:48 pm (спустя 2 часа 19 минут; написано за 11 секунд)
   Post subject:
Reply with quote

Майоров Павел wrote:
вот этой строчки у меня не было...
Знаю. И?
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Jul 13, 2007 1:59 pm (спустя 1 месяц 5 дней 22 часа 10 минут; написано за 33 секунды)
   Post subject:
Reply with quote

Дмитрий Котеров
можно ли в хвост наблы 39 вставить ссылку на наблу 40 ?
Back to top
View user's profile Send private message
dimasokol
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Sep 25, 2007 10:12 am (спустя 2 месяца 11 дней 20 часов 13 минут)
   Post subject:
Reply with quote

Quote:
Во-первых, ставить ; в конце не обязательно: в JavaScript точка с запятой — вообще необязательный символ
Кажется мне что неправда ваша. Стоит мне забыть ";" - интерпретатор всегда ругается.
Back to top
Zeroglif
Участник форума



Joined: 02 Jan 2006
Posts: 293
Карма: 61
   поощрить/наказать


PostPosted: Tue Sep 25, 2007 11:34 am (спустя 1 час 22 минуты; написано за 5 минут 10 секунд)
   Post subject:
Reply with quote

dimasokol wrote:
Кажется мне что неправда ваша.
Точка с запятой обязательна в отношении определённых конструкций (empty statement, variable statement, expression statement, do-while statement, continue statement, break statement, return statement, throw statement), но если программист "забыл" её поставить (вольно или невольно), то при соблюдении определённых условий движок его поправит, для чего в нём реализован механизм ASI (automatic semicolon insertion), см. ECMAScript 7.9.
dimasokol wrote:
интерпретатор всегда ругается
Какой интерпретатор и какой код?
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Aug 14, 2008 9:38 am (спустя 10 месяцев 18 дней 22 часа 3 минуты; написано за 48 секунд)
   Post subject:
Reply with quote

Уважаемый Дмитрий Котеров вот этот код работает не правильно (в фаерфокс и опере в ие не проверял):
Code (JavaScript): скопировать код в буфер обмена
Array.prototype.toString =
Object.prototype.toString = function() {
  var cont = [];
  var addslashes = function(s) {
    // Использовать replace НЕЛЬЗЯ - в Опере
    // происходит зацикливание, т.к. из replace
    // зачем-то вызывается Object.toString().
    return
      s.split('\\').join('\\\\').split('"').join('\\"');
  }
  for (var k in this) {
    if (cont.length) cont[cont.length-1] += ",";
    var v = this[k];
    var vs = '';
    if (v.constructor == String)
      vs = '"' + addslashes(v) + '"';
    else
      vs = v.toString();
        if (this.constructor == Array)
      cont[cont.length]
        else
      cont[cont.length] = k + ": " + vs;
  }
  // Здесь тоже нельзя делать replace()!
  cont = "  " + cont.join("\n").split("\n").join("\n  ");
  var s = cont;
  if (this.constructor == Object) {
    s = "{\n"+cont+"\n}";
  } else if (this.constructor == Array) {
    s = "[\n"+cont+"\n]";
  }
  return s;
}
я его исправил вот так:
Code (JavaScript): скопировать код в буфер обмена
Array.prototype.toString =
Object.prototype.toString = function() {
  var cont = [];
  var addslashes = function(s) {
    // Использовать replace НЕЛЬЗЯ - в Опере
    // происходит зацикливание, т.к. из replace
    // зачем-то вызывается Object.toString().
    return
      s.split('\\').join('\\\\').split('"').join('\\"');
  }
  for (var k in this) {
    if (cont.length) cont[cont.length-1] += ",";
    var v = this[k];
    var vs = '';
    if (typeof v.constructor == String)
      vs = '"' + addslashes(v) + '"';
    else
      vs = v.toString();
        if (typeof this.constructor == Array)
      cont[cont.length]
        else
      cont[cont.length] = k + ": " + vs;
  }
  // Здесь тоже нельзя делать replace()!
  cont = "  " + cont.join("\n").split("\n").join("\n  ");
  var s = cont;
  if (this.constructor == Object) {
    s = "{\n"+cont+"\n}";
  } else if (this.constructor == Array) {
    s = "[\n"+cont+"\n]";
  }
  return s;
}
Back to top
View user's profile Send private message Send e-mail
Fi1osof
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sat Aug 22, 2009 1:13 pm (спустя 1 год 8 дней 3 часа 34 минуты; написано за 2 минуты 26 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Менять "вы" на "Вы" не буду, потому что это грамматически неверно. "Вы" с большой буквы применяется только при обращении к конкретному человеку и только в переписке. В статьях это делать неграмотно. gramota.ru рулит. (-;
Все верно. "Вы" неуместно.

А вообще лично мне плевать на какие-то там ошибки (которых я ни одной не заметил). Потому что статью читал не для повышения своих знаний в русском языке, а для повышения знаний в javascript. От души спасибо за статью!!! Респект и уважуха! Написано очень информативно и на удивление интересно и не скучно. Спасибо! :-)
Back to top
AlexSmf
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Jan 11, 2010 4:54 pm (спустя 4 месяца 20 дней 3 часа 41 минуту; написано за 1 минуту 18 секунд)
   Post subject:
Reply with quote

не работает в фаерфоксе конструкции типа if (v.constructor == String)
надо заменять на if (typeof v.constructor == String)
впрочем, об этом уже написали немного выше, так что присоединяюсь к тому что выше написал Александр Михалицын.
Back to top
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 38
   поощрить/наказать


PostPosted: Wed Aug 08, 2012 1:12 pm (спустя 2 года 6 месяцев 27 дней 20 часов 17 минут; написано за 50 секунд)
   Post subject:
Reply with quote

Исправил ошибки если внутри объекта/массива есть undefined или null - у них нет toString()
Code (JavaScript): скопировать код в буфер обмена
Array.prototype.toString =
Object.prototype.toString = function() {
  var cont = [];
  var addslashes = function(s) {
    //
    //
    //
    return s.split('\\').join('\\\\').split('"').join('\\"');
  }
  for (var k in this) {
    if (cont.length) cont[cont.length-1] += ",";
    var v = this[k];
    var vs = '';

    if (typeof v == 'undefined')
      vs = '[undefined]';
    else if (v == null)
      vs = '[null]';
    else if (typeof v == 'string')
      vs = '"' + addslashes(v) + '"';
    else
      vs = v.toString();
    if (this.constructor == Array)
      cont[cont.length] = vs;
    else
      cont[cont.length] = k + ": " + vs;
  }
  //
  cont = "  " + cont.join("\n").split("\n").join("\n  ");
  var s = cont;
  if (this.constructor == Object) {
    s = "{\n"+cont+"\n}";
  } else if (this.constructor == Array) {
    s = "[\n"+cont+"\n]";
  }
  return s;
}
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Fri Oct 03, 2014 9:41 am (спустя 2 года 1 месяц 25 дней 20 часов 28 минут; написано за 9 секунд)
   Post subject:
Reply with quote

Quote:
""
    1. [url][img]
      Code (JavaScript): скопировать код в буфер обмена
      [/img][/url]
Code (Visual Basic): скопировать код в буфер обмена
[color=orange][/color]
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page Previous  1, 2
Page 2 of 2    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML