diff --git a/index.js b/index.js index b629542..7fefa56 100644 --- a/index.js +++ b/index.js @@ -141,7 +141,7 @@ function walk (root, cb, immutable) { if (stopHere) keepGoing = false; }, remove : function (stopHere) { - if (Array_isArray(state.parent.node)) { + if (isArray(state.parent.node)) { state.parent.node.splice(state.key, 1); } else { @@ -221,7 +221,7 @@ function copy (src) { if (typeof src === 'object' && src !== null) { var dst; - if (Array_isArray(src)) { + if (isArray(src)) { dst = []; } else if (isDate(src)) { @@ -245,12 +245,18 @@ function copy (src) { else if (Object.create && Object.getPrototypeOf) { dst = Object.create(Object.getPrototypeOf(src)); } - else if (src.__proto__ || src.constructor.prototype) { - var proto = src.__proto__ || src.constructor.prototype || {}; + else if (src.constructor === Object) { + dst = {}; + } + else { + var proto = + (src.constructor && src.constructor.prototype) + || src.__proto__ + || {} + ; var T = function () {}; T.prototype = proto; dst = new T; - if (!dst.__proto__) dst.__proto__ = proto; } forEach(Object_keys(src), function (key) { @@ -275,7 +281,7 @@ function isBoolean (obj) { return toS(obj) === '[object Boolean]' } function isNumber (obj) { return toS(obj) === '[object Number]' } function isString (obj) { return toS(obj) === '[object String]' } -var Array_isArray = Array.isArray || function isArray (xs) { +var isArray = Array.isArray || function isArray (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; diff --git a/package.json b/package.json index d804fce..e12b2fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "traverse", - "version" : "0.6.1", + "version" : "0.6.2", "description" : "Traverse and transform objects by visiting every node on a recursive walk", "author" : "James Halliday", "license" : "MIT/X11",