fn有toString方法,string没有toFunction方法,自定义一个toFunction方法

fn有toString方法,string没有toFunction方法,自定义一个toFunction方法更新:感谢@行列[xxooyy]给了一个更加精简的方法实现:String.prototype.toFunction=function(){returneval(‘(‘+this+’)’)};//重点在'(‘和’)’String.prototype.toFunction=function(){varfnSt…

大家好,欢迎来到IT知识分享网。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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/20966.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信