资讯专栏INFORMATION COLUMN

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

qiangdada / 2382人阅读

摘要:更新感谢行列给了一个更加精简的方法实现重点在和方法很笨拙,不知道有没有大神给改改的,或者有什么可替换的系统方法。总结一行神奇的代码会还原到

更新:
感谢 @行列[xxooyy] 给了一个更加精简的方法实现:

String.prototype.toFunction=function(){ return eval("("+this+")")};
//重点在"("和")"
String.prototype.toFunction = function () {
    var fnString = this.toString();
    var preRs = "^functions*[a-zA-Z]*?([sS]*?)s*{";
    var endRs = "}$";
    var argRs = "^functions*[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://www.ucloud.cn/yun/80844.html

相关文章

  • 《javascript高级程序设计》笔记:valueOf() / toString() 对比

    摘要:中这样描述和调用方法用来把对象转换成原始类型的值数值字符串和布尔值。你很少需要自己调用此函数当遇到一种需要转换成一个原始值情况时候,会自动调用此函数。默认情况下会被每个对象继承。 MDN 中这样描述 valueOf() 和 toString(): JavaScript 调用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值)。 你很少需要自己调用此函数;当...

    yzzz 评论0 收藏0
  • 盘点Vue源码中用到的工具函数

    摘要:用做缓存的高阶函数用高阶函数的好处是无需暴露不同要求的缓存对象在外面,形成一个闭包。函数内部调用函数得到操作后的值,并缓存在对象中,如果再对同一个值进行操作时,则直接从缓存中取,无需再调用函数计算。 以下摘取的函数,在 shared 目录下公用的工具方法。文件在 util.js 中,githu地址。 提取了一些常用通用的函数进行剖析,主要包含以下内容: 创建一个被冻结的空对象 判断是...

    elarity 评论0 收藏0
  • vue的源码分析(全局工具函数)

    摘要:创建一个自调用匿名函数,设计参数,并传入对象。表示独一无二的值声明时不能使用,而是声明时可以加参数,用于描述作为时不能被遍历这个函数主要是检测当前对象是否有某种属性。给变量赋值一个空的对象返回一个的函数,将函数的参数的带入并赋值,返回。 VUE 2.6.8 (function (global, factory) { typeof exports === object && type...

    Baaaan 评论0 收藏0
  • javascript的面向对象,原型链及继承

    摘要:也就是说,不必在构造函数中添加定义对象信息,而是可以直接将这些信息添加到原型中。子类的属性,表示构造函数的继承,总是指向父类。以前,这些原生构造函数是无法继承的。 面向对象 js是一门基于对象的语言。js中的一切皆对象; console.log(Object.prototype.toString.call(123)) //[object Number] console....

    Xufc 评论0 收藏0
  • 标准库(一)object对象

    摘要:控制对象状态的方法防止对象扩展。判断一个对象是否被冻结。返回当前对象对应的值。方法的作用是返回一个对象的字符串形式上面代码表示,对于一个对象调用方法,会返回字符串用途通过自定义方法,可以让对象在自动类型转换时,得到想要的字符串形式。 概述Object()Object 构造函数Object 的静态方法「本身的方法Object.keys(),Object.getOwnPropertyNam...

    Muninn 评论0 收藏0

发表评论

0条评论

qiangdada

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<