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

    +149

    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
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    (function(G, U) {
        "use strict";
        var $ = G.jQuery,
            string = "string",
            number = "number",
            bool   = "boolean",
            object = "object";
    
        function hasStr(obj, prop) {
            return obj.hasOwnProperty(prop) && typeof obj[prop] === string;
        }
    
        function hasNum(obj, prop) {
            return obj.hasOwnProperty(prop) && typeof obj[prop] === number;
        }
    
        function hasArr(obj, prop) {
            return obj.hasOwnProperty(prop) && $.isArray(obj[prop]);
        }
    
        function hasFn(obj, prop) {
            return obj.hasOwnProperty(prop) && $.isFunction(obj[prop]);
        }
    
        function hasBool(obj, prop) {
            return obj.hasOwnProperty(prop) && typeof obj[prop] === bool;
        }
    
        function copyProps(source, target, fields) {
            var i,
                count,
                fieldType,
                fieldTypes = {
                    str : hasStr,
                    bool: hasBool,
                    arr : hasArr,
                    fn  : hasFn,
                    num : hasNum
                };
                
            if (arguments.length < 2){
                return;
            }
            
            if (arguments.length === 2){
                target = {};
            }
    
            if ($.isPlainObject(source) && $.isPlainObject(target) && $.isPlainObject(fields)) {
                for (fieldType in fieldTypes) {
                    if (fieldTypes.hasOwnProperty(fieldType)) {
                        if (hasArr(fields, fieldType)) {
                            for (i = 0, count = fields[fieldType].length; i < count; i += 1) {
                                if (fieldTypes[fieldType](source, fields[fieldType][i])) {
                                    target[fields[fieldType][i]] = source[fields[fieldType][i]];
                                }
                            }
                        }
                    }
                }
            }
            return target;
        }
    
        G.copyProps = copyProps; //Export into global namespace
    }(this, undefined));

    Здравствуйте! Написал функцию, которая безопасно копирует свойства из одного объекта в другой, выполняя проверку типа каждого копируемого поля. Скажите, какие недостатки и насколько оправдано её применение по сравнению со стандартной функцией jQuery extend()? Работает только с простыми объектами, для вложенных объектов нужно ещё раз вызывать эту функцию.

    Запостил: dunmaksim, 14 Августа 2014

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

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