|
227 | 227 | // This should be similar to the jQuery.extend method
|
228 | 228 | // Just copy (not clone) all fields from source to the target object
|
229 | 229 | JSROOT.extend = function(tgt, src, map, deep_copy) {
|
230 |
| - if ((src == null) || (typeof src != 'object')) return src; |
| 230 | + if ((src === null) || (typeof src !== 'object')) return src; |
231 | 231 |
|
232 |
| - if (deep_copy) { |
| 232 | + if (typeof deep_copy === "undefined") deep_copy = 0; |
| 233 | + |
| 234 | + if (deep_copy > 0) { |
233 | 235 | if (!map) map = { obj:[], clones:[] };
|
234 | 236 | var i = map.obj.indexOf(src);
|
235 | 237 | if (i>=0) return map.clones[i];
|
|
264 | 266 | map.clones.push(tgt);
|
265 | 267 | }
|
266 | 268 | } else {
|
267 |
| - if ((tgt==null) || (typeof tgt != 'object')) tgt = {}; |
| 269 | + if ((tgt===null) || (typeof tgt !== 'object')) tgt = {}; |
268 | 270 | }
|
269 | 271 |
|
270 | 272 | for (var k in src)
|
271 |
| - if (deep_copy) |
272 |
| - tgt[k] = JSROOT.extend(tgt[k], src[k], map, true); |
273 |
| - else |
274 |
| - tgt[k] = src[k]; |
| 273 | + switch (deep_copy) { |
| 274 | + case 0: |
| 275 | + tgt[k] = src[k]; |
| 276 | + break; |
| 277 | + case 1: |
| 278 | + tgt[k] = JSROOT.extend(tgt[k], src[k], map, deep_copy); |
| 279 | + break; |
| 280 | + case 2: |
| 281 | + if (typeof(src[k]) !== 'function') |
| 282 | + tgt[k] = JSROOT.extend(tgt[k], src[k], map, deep_copy); |
| 283 | + break; |
| 284 | + |
| 285 | + default: |
| 286 | + tgt[k] = src[k]; |
| 287 | + } |
275 | 288 |
|
276 | 289 | return tgt;
|
277 | 290 | }
|
278 | 291 |
|
279 | 292 | // Instead of jquery use JSROOT.extend function
|
280 | 293 | // Make deep_copy of the object, including all sub-objects
|
281 |
| - JSROOT.clone = function(obj) { |
282 |
| - return JSROOT.extend(null, obj, null, true); |
| 294 | + JSROOT.clone = function(obj, nofunc) { |
| 295 | + return JSROOT.extend(null, obj, null, nofunc ? 2 : 1); |
283 | 296 | }
|
284 | 297 |
|
285 | 298 | JSROOT.parse = function(arg) {
|
|
0 commit comments