- 1
if (!("" instanceof String)) throw new Error("Empty string is not a string");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+157
if (!("" instanceof String)) throw new Error("Empty string is not a string");
Майкрософт. JScript, ASP.
bormand 19.02.2013 19:32 # 0
wvxvw 19.02.2013 19:39 # −2
wvxvw 19.02.2013 19:41 # −2
Поздно уже, надо домой идти.
Есть три класса и две функции, чтобы определить к какому классу отностися объект. fml.
Dummy00001 20.02.2013 00:57 # −2
В жабаскрипте есть классы?? Что я проспал???
Там же вроде только тот хак с ассоциативными массивами был?
wvxvw 20.02.2013 08:53 # −3
scriptin 20.02.2013 18:40 # +5
> typeof String
"function"
> typeof Number
"function"
> typeof Object
"function"
> String instanceof Function
true
> Number instanceof Function
true
> Object instanceof Function
true
3.14159265 20.02.2013 19:44 # +3
Кстати меня всегда удивляла одна мелочь, зачем разрешили писать new без скобок, вот так:
>> Object instanceof Function
>true
>Function instanceof Object
true
В чем-то @wvxvw прав.
roman-kashitsyn 21.02.2013 10:17 # 0
wvxvw 20.02.2013 20:51 # 0
Кстати, RegExp в некоторых реализациях - тоже функция, а в других - не очень. И в этом нет никакой логики, просто так получилось.
scriptin 20.02.2013 22:52 # +1
Нет. Ни с такими же именами, ни с другими.
ECMA-262, 4.2.1 Objects (p.3):
>ECMAScript does not use classes such as those in C++, Smalltalk, or Java.
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Есть внутреннее свойство [[Class]], которое является строкой, и значение можно получить при помощи вызова `Object.prototype.toString.call(someObj) `.
А классов нет.
wvxvw 20.02.2013 23:11 # −4
Но не нужно упускать из виду главный момент. Логики в жабоскрипте небыло никогда, а все его стандарты - феерический бред. Как Крокфорд говорил в своем автобиографическом интервью: "первый раз, когда я это увидел, я дико смеялся и не мог поверить, что кто-то бы всерьез использовал это недоразумение, но потом я понял, что могло быть и хуже". Ну, ему как бы не с руки хаять жабоскрипт, он на нем практически карьеру сделал, но по глазам видно, когда говорит, сколько неразделенной печали кроется за этим "на первый взгляд...".
scriptin 21.02.2013 00:02 # +4
roman-kashitsyn 21.02.2013 00:10 # +4
Когда весьма неприятные последствия или недоработки всё же выясняются, кардинально менять что-то уже поздно, ибо слишком велик риск поломать миллионы строк унаследованного кода, в который вложенны миллиарды долларов.
С одной стороны - желание сделать "логично" и "правильно", с другой - тяжёлый груз наследия. Угадайте, кто побеждает в этом поединке...
Правдив старый анекдот - серьёзная разработка - как секс. Одна ошибка, и тебе придётся поддерживать её всю жизнь.
А задним умом всяк крепок.
wvxvw 21.02.2013 00:20 # −5
Смысл не в том, что у всех есть проблемы - это и ежу понятно, а в том, что на общем фоне, ну, разве что ВБСкрипт только хуже. Ну есть еще Ант и XSLT, хз, на Коболе писать не приходилось... еще есть масса мелочи типа AWK, всяких там проприетарных языков (особенно таких, которые используют в дико дорогих CI серверах / эмуляторах).
НО... ведь было же до того, как был жабоскрипт. Люди ведь уже к тому времени изобрели хорошие вещи, теория была известна, существовала практика. И тем не менее, это говно живет и здравствует и по сей день :(
ЗЫ. А вот и та самая цитата, нашел таки:
wvxvw 21.02.2013 00:32 # −5
Ну да не суть. Так вот, проект - отборное говно, и всегда таким был, но люди которые над ним работали потеряли какую-либо надежду его исправить в виду просто феноменального идиотизма изначальных авторов. Но со временем это изза того, что проект не развивался а "поддерживался", он на столько ухудшился, что сейчас при всем большом желании с ним уже ничего не поделать. Но, как говорит один из старожилов "но оно же, сука, работает!"
Жабоскрипт находится в очень похожей ситуации: он не развивается, это уебищная система, которая должна была умереть много лет назад, примерно тогда же, когда должен был умереть XML, sendmail, HTTP и HTML но все эти технологии каким-то образом продолжают существовать и их аудитория только увеличивается :(
eth0 22.02.2013 20:30 # 0
P.S. Firefox 18+ достаточно быстр, чтобы прямо из него играть в порт Cube3D на JS (yandex:Bananabread). Пока ещё проба технологии, но за этим будущее.
wvxvw 22.02.2013 21:33 # 0
wvxvw 20.02.2013 23:27 # 0
wvxvw 20.02.2013 23:50 # 0
Lure Of Chaos 20.02.2013 01:14 # +2
zloirock 20.02.2013 11:28 # +5
Автор - лол.
wvxvw 20.02.2013 20:55 # −3
Ну да не важно, а важно то, что незыблимые основы не были такими незыблимыми несколько лет назад, и в ЕС4 было принято решение сделать так, чтобы new String("foo") и "foo" были бы одним и тем же. Поразительная находка, после полутора десятков лет мытарств и недоумений закрадывавшихся порой в обьзьянью умы "жабоскрипт программистов". Но потом решили, да ну и хер с ним, сделать из этого говна все равно ничего путнего не получится, ну так вернем все как было, пусть обезьянки еще порезвятся немного.
RaZeR 20.02.2013 21:13 # 0
deep 21.02.2013 11:25 # −1
Вот ваши "инстансы":
console.log(obj.constructor == Object);
console.log(obj.constructor == Array);
console.log(obj.constructor == String);
console.log(obj.constructor == Number);
console.log(obj.constructor == Boolean);
и т.д по кастомным..
Реализует вашу задачу? Да.
В чем проблема?
zloirock 21.02.2013 12:07 # 0
Нужно узнать внутренний класс - как уже выше было сказано:
Нужно проверить нахождение в цепочке прототипов - instanceof, isPrototypeOf.
Всё.
zloirock 21.02.2013 12:13 # 0
deep 21.02.2013 12:53 # 0
У языка изначально своя концепция.
Почему бы не принять её такой, какая она есть, а не навешивать "удобные" баребухи?
zloirock 21.02.2013 13:44 # 0
А вот 90% мартышек делает просто:
Концепция у js своя и этот ваш constructor оставьте себе - Object.create куда прототипному языку ближе.
scriptin 21.02.2013 19:13 # +2
anonimb84a2f6fd141 07.04.2013 00:35 # −2
LispGovno 07.04.2013 11:23 # +1