diff --git a/__tests__/base.js b/__tests__/base.js index ac6a85d0..0c23cba4 100644 --- a/__tests__/base.js +++ b/__tests__/base.js @@ -555,6 +555,19 @@ function runBaseTest(name, useProxies, freeze) { }) }) + it("should handle constructor correctly", () => { + const base = { + arr: new Array(), + obj: new Object() + } + const result = produce(base, draft => { + draft.arrConstructed = draft.arr.constructor(1) + draft.objConstructed = draft.obj.constructor(1) + }) + expect(result.arrConstructed).toEqual(new Array().constructor(1)) + expect(result.objConstructed).toEqual(new Object().constructor(1)) + }) + it("should handle dates correctly", () => { const data = {date: new Date()} const next = produce(data, draft => { diff --git a/src/proxy.js b/src/proxy.js index cf842a33..b41bb898 100644 --- a/src/proxy.js +++ b/src/proxy.js @@ -65,7 +65,8 @@ function get(state, prop) { return (state.copy[prop] = createProxy(state, value)) return value } else { - if (prop in state.proxies) return state.proxies[prop] + if (prop !== "constructor" && prop in state.proxies) + return state.proxies[prop] const value = state.base[prop] if (!isProxy(value) && isProxyable(value)) return (state.proxies[prop] = createProxy(state, value))