fn有toString要领,string没有toFunction要领,自定义一个toFunction要领

更新:
谢谢 @行列[xxooyy] 给了一个越发精简的要领完成:

String.prototype.toFunction=function(){ return eval('('+this+')')};
//重点在'('和')'
String.prototype.toFunction = function () {
    var fnString = this.toString();
    var preRs = "^function\\s*[a-zA-Z]*?\\([\\s\\S]*?\\)\\s*\\{";
    var endRs = "\\}$";
    var argRs = "^function\\s*[a-zA-Z]*?\\(|\\)\\s*\\{|\\s*";
    var preReg = new RegExp(preRs, 'i');
    var endReg = new RegExp(endRs);
    var argReg = new RegExp(argRs, 'g');
    var preEndReg = new RegExp(preRs + '|' + endRs, 'gi');
    if (preReg.test(fnString)) {
        var preEnd = fnString.match(preEndReg);
        var fnArguments = preEnd[0].replace(argReg, '').split(',');
        var fnBody = fnString.replace(preEndReg, '');
        var fn = new Function(fnArguments, fnBody);
        return fn;
    } else {
        return fnString;
    }
}

'function (a) { console.log(a); }'.toFunction();
//function anonymous(a) { console.log(a); }

要领很愚笨,不知道有无大神给改改的,或许有什么可替代的体系要领。
https://jsfiddle.net/jsoncode…

总结一行奇异的代码:

var fn = function (){};
new Function('return '+Function.prototype.toString.call(fn));
//会复原到fn
    原文作者:jsoncode
    原文地址: https://segmentfault.com/a/1190000007438972
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞