cocos creatorはcloneデータ関数を実現する

1725 ワード

原文:https://segmentfault.com/a/1190000007239515
//   
//    
// Symbol 
//   
// Boolean
// Null
// Undefined
// Number
// String
// Array
// Object
// function
// 
// console.log(g_clone(true));
// console.log(g_clone(false));
// console.log(g_clone(0));
// console.log(g_clone(12));
// console.log(g_clone(''));
// console.log(g_clone('abc'));
// console.log(g_clone(null));
// console.log(g_clone([1,2,3]));
// console.log(g_clone([]));
// console.log(g_clone({name:'zh',age:'18'}));
// console.log(g_clone({}));
// cc.log(g_clone(g_arrayEqual) == g_arrayEqual)
// 
// true
// false
// 0
// 12
// ""
// abc
// null
// (3) [1, 2, 3]
// []
// {name: "zh", age: "18"}
// {}
// false
function clone(obj){
    var copy;
    switch(typeof obj){
        case 'undefined':break;
        case 'number':
        case 'string':
        case 'boolean':copy = obj;break;
        case 'function':
            //     cc.log(g_clone(g_arrayEqual) == g_arrayEqual)  false
            copy = new Function("return " + obj.toString())();

            //  cc.log(g_clone(g_arrayEqual) == g_arrayEqual)  true
            //copy = obj;break;
            break;
        case 'object':
            if(obj == null) copy = null;
            else if(toString.apply(obj) === '[object Array]')
            {
                copy = [];
                for(var i in obj) copy.push(clone(obj[i]));
            }
            else 
            {
                copy = {};
                for(var j in obj)
                    copy[j]= clone(obj[j]);
            }
    }
    return copy;
}
window.g_clone = clone