ЙажаСценарий / Говнокод #11901 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 wvxvw, (Updated )

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

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

      А теперь вот улучшили.
      Ответить
    • А еще жабоскрипт собираются улучшить и разнообразить всякой замечательной херней типа "понимание массивов", генераторы и т.п. Чтобы немного усложнить понимание кода, и таким образом создать видимость более основательного подхода к языку.
      Ответить
      • >"понимание массивов"
        У меня еще где-то должен лежать старый диск с Prompt'ом
        Ответить
      • > херней типа "понимание массивов", генераторы и т.п.

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

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

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

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

            Когда это у нас c++ успел стать илитарным
            Ответить
                • Жаль, что там ничего по поводу Python и Javascript нет 🙂 Про Джаву очень смешно.
                  Ответить
                  • >по поводу Python и Javascript нет
                    По сравнению с жабой - божественные языки.

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

                    wvxvw
                    Спасибо. Я джва года ждал такой сайт где весело поливают говном всех и вся.
                    Ответить
                • Меня заципила одна фраза:
                  > "I think we should look for elegance in the applications built, rather than in the languages themselves"

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

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

                    Думаю, что не посвятил бы
                    Ответить
          • >А еще лучше - не использовать Яваскрипт вообще
            Я только за. Но более использовать то нечего Vbscript не в счет.
            Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8