为动态生成的JS函数分配自定义属性

Assign custom property to dynamically generated JS functions

本文关键字:函数 分配 自定义属性 JS 动态      更新时间:2023-09-26

我正在尝试设置函数的速度测试。当我直接传递一个函数时,它可以工作,但是我想为同事提供一个表单来剪切和粘贴他们自己的。

    function sendTest() {
        //fName, fContent
        var fName = document.getElementById("fName").value;
        var fContent = document.getElementById("fContent").value;
        var f = new Function(fName, fContent);
        f.name = fName;
        testTime(f);
    }

testTime()是评估性能的函数,从sendTest()评估执行时间是正确的,但是我不能从testTime()访问函数名来显示函数名和结果。f.name和f.fName都显示为undefined

函数是一个对象,对吗?所以我应该可以给它应用name属性?

对于你的特定问题,这似乎是一个比别人标记你的问题的副本更简单的答案。

在ES6中,有一个函数的内置.name属性是不可写的,所以这就是为什么你不能给它赋值(链接到ES6规范草案的特定部分)。你应该能够使用不同的属性名称,如果你想分配一个名称,你这样做的方式。

使用不同属性名的工作演示:http://jsfiddle.net/jfriend00/6PVMq/

f = new Function("log('Hello')");
f.myName = "sayHi";
function testFunc(func) {
    log("function name is: " + func.myName);
    func();
}
testFunc(f);