From 51184d758f2f83404bfa8c7184c9504c120e3720 Mon Sep 17 00:00:00 2001 From: Kongnet <9601698@qq.com> Date: Mon, 2 Sep 2019 19:16:11 +0800 Subject: [PATCH] Update clone_6.js native function and empty function support --- demo/deepClone/src/clone_6.js | 40 +++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/demo/deepClone/src/clone_6.js b/demo/deepClone/src/clone_6.js index 85014da01..71d6ca835 100644 --- a/demo/deepClone/src/clone_6.js +++ b/demo/deepClone/src/clone_6.js @@ -50,26 +50,30 @@ function cloneReg(targe) { return result; } -function cloneFunction(func) { - const bodyReg = /(?<={)(.|\n)+(?=})/m; - const paramReg = /(?<=\().+(?=\)\s+{)/; - const funcString = func.toString(); - if (func.prototype) { - const param = paramReg.exec(funcString); - const body = bodyReg.exec(funcString); - if (body) { - if (param) { - const paramArr = param[0].split(','); - return new Function(...paramArr, body[0]); - } else { - return new Function(body[0]); - } - } else { - return null; - } +function cloneFunction (func) { + const bodyReg = /(?<={)(.|\n)+(?=})/m + const paramReg = /(?<=\().+(?=\)\s+{)/ + const funcString = func.toString() + if (func.prototype) { + const param = paramReg.exec(funcString) + const body = bodyReg.exec(funcString) + if (body) { + if (param) { + const paramArr = param[0].split(',') + return new Function(...paramArr, body[0]) + } else { + return new Function(body[0]) + } + } else { + return new Function() + } + } else { + if (funcString.includes('{ [native code] }')) { + return func } else { - return eval(funcString); + return eval(funcString) } + } } function cloneOtherType(targe, type) {