Changeset 22446


Ignore:
Timestamp:
02/21/18 16:29:47 (7 years ago)
Author:
dlcheng
Message:

CHG (JS): Adding deepCopy routine to model.js.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/model.js

    r22324 r22446  
    554554                        return md;
    555555                } /*}}}*/
     556                this.deepCopy = function(md) { //{{{
     557                        /*
     558                         *DEEPCOPY - returns a deep copy of the model.
     559                         *
     560                         *   This routine creates a new model with new objects
     561                         *   for each corresponding object in the original model,
     562                         *   so that changes in one do not affect the other.
     563                         *
     564                         *   Usage:
     565                         *       md1=deepCopy(md)
     566                         *
     567                         */
     568                        var md1;
     569
     570                        switch (typeof obj) {
     571                                case "object":
     572                                        if (obj === null) {
     573                                                // null => null
     574                                                md1 = null;
     575                                        } else {
     576                                                switch (toString.call(obj)) {
     577                                                        case "[object Array]":
     578                                                                // It's an array, create a new array with
     579                                                                // deep copies of the entries
     580                                                                md1 = obj.map(deepCopy);
     581                                                                break;
     582                                                        case "[object Date]":
     583                                                                // Clone the date
     584                                                                md1 = new Date(obj);
     585                                                                break;
     586                                                        case "[object RegExp]":
     587                                                                // Clone the RegExp
     588                                                                md1 = new RegExp(obj);
     589                                                                break;
     590                                                        // ...probably a few others
     591                                                        default:
     592                                                                // Some other kind of object, deep-copy its
     593                                                                // properties into a new object
     594                                                                md1 = Object.keys(obj).reduce(function(prev, key) {
     595                                                                        prev[key] = deepCopy(obj[key]);
     596                                                                        return prev;
     597                                                                }, {});
     598                                                                break;
     599                                                }
     600                                        }
     601                                        break;
     602                                default:
     603                                        // It's a primitive, copy via assignment
     604                                        md1 = obj;
     605                                        break;
     606                        }
     607                        return md1;
     608                } /*}}}*/
    556609        //properties
    557610        // {{{
Note: See TracChangeset for help on using the changeset viewer.