1. JavaScript / Говнокод #11901

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    function isProperty(object, property) {
        "use strict";
        var p, names, original = object,
            ecmaTypes = [Object, Array, String, Number, Date];
        try {
            for (p = 0; p < ecmaTypes.length; p += 1) {
                if (ecmaTypes[p] == object) {
                    console.log("looking up: " + ecmaTypes[p]);
                    names = Object.getOwnPropertyNames(ecmaTypes[p]);
                    if ('prototype' in ecmaTypes[p]) {
                        names = names.concat(
                            Object.getOwnPropertyNames(
                                ecmaTypes[p].prototype));
                    }
                    break;
                }
            }
            do {
                object = object.prototype.__proto__.constructor;
                names = names ?
                    names.concat(Object.getOwnPropertyNames(object)) : [];
                if ('prototype' in object) {
                    names = names.concat(
                        Object.getOwnPropertyNames(object.prototype))
                }
            } while  (object != Object)
            if (!names) {
                names = Object.getOwnPropertyNames(object);
            }
        } catch (error) {
            for (p in object) {
                if (object[p] == property) {
                    return true;
                }
            }
            return false
        }
        for (p = 0; p < names.length; p += 1) {
            if (original[names[p]] == property ||
                original.prototype[names[p]] == property) {
                return true;
            }
        }
        return false;
    }

    А как еще узнать, является ли функция методом принадлежащим объекту или нет? Это еще после трех часов проведенных в муках пытаясь понять, что вообще происходит.

    Запостил: wvxvw, 10 Октября 2012

    Комментарии (27) RSS

    • Object.hasOwnProperty?
      Ответить
      • Нет, тут проверяется что, например "x".toString == String.prototype.toString. Т.е. нам нужно узнать что какая-то функция является методом объекта, у нас нет "имени" этой функции.
        В ES3 достаточно было просто перебрать все ключи объекта и сравнить, типа:
        for (var i in o.constructor.prototype) {
            if (o[i] == f) // да, это наша функция
        }

        А теперь вот улучшили.
        Ответить
    • "use strict";

      Это что за Perl такой?
      Ответить
      • https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode
        Ответить
      • А еще жабоскрипт собираются улучшить и разнообразить всякой замечательной херней типа "понимание массивов", генераторы и т.п. Чтобы немного усложнить понимание кода, и таким образом создать видимость более основательного подхода к языку.
        Ответить
        • >"понимание массивов"
          У меня еще где-то должен лежать старый диск с Prompt'ом
          Ответить
        • > херней типа "понимание массивов", генераторы и т.п.

          вот тебе не нужны генераторы и list comprehensions, а мне очень нужны, лично я с нетерпением жду ECMAScript6.

          Я за функциональщину в JS.

          http://brendaneich.github.com/Strange-Loop-2012/
          Ответить
          • Так как бы от их наличия или отсутствия ничего не зависит. А то, что не только баги не правят, а еще и портят то, что нормально работало - не может не радовать.
            Всякие фокусы типа тут сэкономить одну букву, там две - ни на что абсолютно не влияют, и только в целом ухудшают то самое "понимание", т.как приводят к тому, что есть несколько способов сделать одно и то же, и, как результат, нужно заучивать больше ненужной херни. Но как в небезызвестном "интервью" со Страуструпом - чем херовее язык (чем тяжелее запомнить все возможные извращения в грамматике), тем больше шансов на элитарность.

            А Б. Ейк - идиот тот еще. Его просто лучше не читать и не обращать внимания. А еще лучше - не использовать Яваскрипт вообще :)
            Ответить
            • > чем херовее язык (чем тяжелее запомнить все возможные извращения в грамматике), тем больше шансов на элитарность

              Когда это у нас c++ успел стать илитарным
              Ответить
              • Ну как когда! Классику надо знать.
                http://harmful.cat-v.org/software/c++/I_did_it_for_you_all
                Ответить
                • http://harmful.cat-v.org/software/java

                  > Java: write once, run away!
                  > Java is a DSL to transform big XML documents into long exception stack traces.

                  я плакал
                  Ответить
                  • > Java is a DSL to transform big XML documents into long exception stack traces.
                    Самая суть. Просто в точку.

                    Кстати, по поводу элитарности:
                    http://pichub.ru/pic_b/12/10/11/ff807482be639cd171b6de1f299c79bd.jpg
                    Ответить
                  • > There are only two things wrong with C++: The initial concept and the implementation.
                    Ответить
                  • Жаль, что там ничего по поводу Python и Javascript нет :) Про Джаву очень смешно.
                    Ответить
                    • >по поводу Python и Javascript нет
                      По сравнению с жабой - божественные языки.

                      The definition of Hell is working with dates in Java, JDBC, and Oracle.

                      wvxvw
                      Спасибо. Я джва года ждал такой сайт где весело поливают говном всех и вся.
                      Ответить
                      • Сайт да, хороший. Я случайно за чем-то туда забрел из Гугла года полтора назад, уже не помню, что искал, но приглянулось :)
                        Ответить
                        • Еще есть
                          http://wiki.theory.org/YourLanguageSucks
                          Но harmful.cat-v.org как-то душевней.
                          Ответить
                • Только сейчас наткнулся на опровержение подлинности этого интервью:
                  http://www.stroustrup.com/bs_faq.html#really-say-that (под заголовком "Did you really give an interview to IEEE?")

                  Вот настоящее интервью:
                  http://www.stroustrup.com/ieee_interview.html
                  Ответить
                  • Меня заципила одна фраза:
                    > "I think we should look for elegance in the applications built, rather than in the languages themselves"

                    Этот совет Страуструп посвятил бы @LispGovno. Красоту следует искать не в языках, а в дизайне приложений.
                    Мне это напоминает ситуацию с музыкой: есть довольно много форм и музыкальных приёмов (модуляции, синкопы, нюансы, смены размеров, полифония, тысячи их). Но это не значит, что хотя бы одним из них можно украсить произведение мастера. Просто собрав их всё вместе, не получить шедевра.
                    Базовые приёмы и умелая рука мастера способны на гораздо бОльшие свершения, чем школьник с миллионом свистелкоперделок.
                    Ответить
                    • > Меня заципила одна фраза
                      Цып-цып-цып, цыплятки.

                      > Красоту следует искать не в языках, а в дизайне приложений.
                      Ну не все так просто. Некоторые языки из-за своего убогого дизайна просто сподвигают программистов писать говно...
                      Ответить
                    • Дай дураку суперкомпьютер 15-летней давности. У многих дома стоит сопоставимое железо.
                      Но он не родит ничего хорошего - как обезьяна с печатной машинкой.
                      Максимум на что он способен - лазить вконтакте и мейлру, смотреть камеди клаб и наркомана павлика, слушать гуфа и ак-47.
                      Ответить
                    • Толковые люди даже минималистичными, ограниченными средствами добиваются больше, чем бездари с технологиями и железом.
                      Вот пример: шахматы на 1К от Оскара Толедо.
                      Гумно на хацкиле такого в жизни не сделает, потому что основной инструмент тут не язык, не процессор, а как ни странно голова.
                      Ответить
                    • >Этот совет Страуструп посвятил бы @LispGovno

                      Думаю, что не посвятил бы
                      Ответить
            • >А еще лучше - не использовать Яваскрипт вообще
              Я только за. Но более использовать то нечего Vbscript не в счет.
              Ответить
              • Есть Хекс, есть нейтив клаент. А можно просто оставить этот промысел тем, кому это нравится. И тогда...
                http://www.youtube.com/watch?feature=player_detailpage&v=CMj7UcjPZ0U#t=109s
                Ответить

    Добавить комментарий