1. 程式人生 > >實現物件深拷貝的簡單案例

實現物件深拷貝的簡單案例

程式碼

function deep() {
        var length = arguments.length;
        if (length <= 2) {
            if (length === 1) {
                return deep({}, arguments[0]);
            }
            else if (length === 2) {
                deepCopy(arguments[0],arguments[1]);
            }
            else
{ return {}; } } else { for (var i = 1; i < length; i++) { deepCopy(arguments[0],arguments[i]); } } return arguments[0]; function deepCopy(newObj,oldObj) { for (var i in oldObj) { if
(typeof oldObj[i] === 'object') { if (oldObj[i].constructor === Array) { // 如果屬性為陣列的情況下 newObj[i] = []; } else if (oldObj[i] instanceof HTMLElement || oldObj[i] === window) { // 如果屬性為dom物件或者window物件的情況下
newObj[i] = oldObj[i]; } else { // 如果屬性為純粹物件的情況下 if(!newObj[i] || !(newObj[i] instanceof Object)) { newObj[i] = {}; } } deepCopy(newObj[i],oldObj[i]); } else { newObj[i] = oldObj[i]; } } return newObj; } }

使用方法

  • deep(a,b) 返回擴充套件後的a物件,a物件有b物件的所有屬性值
  • deep({},a,b)返回一個新物件,新物件包括a物件和b物件的所有屬性值,有相同屬性時b物件的會覆蓋a物件,後面的物件優先順序高,可以傳多個物件