diff --git a/src/index.js b/src/index.js index dd7f003..4b866ba 100755 --- a/src/index.js +++ b/src/index.js @@ -7,7 +7,7 @@ export function klona(x) { if (x.constructor !== Object && typeof x.constructor === 'function') { tmp = new x.constructor(); for (k in x) { - if (tmp.hasOwnProperty(k) && tmp[k] !== x[k]) { + if (x.hasOwnProperty(k) && tmp[k] !== x[k]) { tmp[k] = klona(x[k]); } } diff --git a/src/lite.js b/src/lite.js index d0ee09d..bbd342e 100644 --- a/src/lite.js +++ b/src/lite.js @@ -7,7 +7,7 @@ export function klona(x) { if (x.constructor !== Object && typeof x.constructor === 'function') { tmp = new x.constructor(); for (k in x) { - if (tmp.hasOwnProperty(k) && tmp[k] !== x[k]) { + if (x.hasOwnProperty(k) && tmp[k] !== x[k]) { tmp[k] = klona(x[k]); } } diff --git a/test/suites/class.js b/test/suites/class.js index 5d28822..65d7475 100644 --- a/test/suites/class.js +++ b/test/suites/class.js @@ -203,5 +203,19 @@ export default function (klona) { ); }); + Classes('constructor properties :: Object.assign', () => { + class Foobar { + constructor(data) { + Object.assign(this, data); + } + } + const input = new Foobar({ test: 123 }); + const output = klona(input); + + assert.deepEqual(input, output); + assert.equal(input.constructor, output.constructor); + assert.equal(output.constructor.name, 'Foobar'); + }); + Classes.run(); }