- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 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()? Работает только с простыми объектами, для вложенных объектов нужно ещё раз вызывать эту функцию.
Vizer 14.08.2014 14:24 # +2
2. Требует передавать структуру копируемого объекта, рассортированную по типам - no user friendly api.
3. Зависит от jQuery - так зачем нужен этот велосипед?
Рекурсивный обход с проверкой типов пишется гораздо проще чем тут. Почитайте сорцы jQuery, underscore.
roman-kashitsyn 14.08.2014 14:38 # +1
dunmaksim 14.08.2014 15:11 # 0
anonimb84a2f6fd141 14.08.2014 16:26 # −7
anonimb84a2f6fd141 14.08.2014 16:26 # −7