更改使用Function构造函数

时间:2016-03-24 18:42:49

标签: javascript ecmascript-6

我想知道是否有办法彻底改变通过Function构造函数构建的函数的名称。

首先,我尝试创建一个新的函数,然后它似乎又有anonymous的名称:

const fnName = 'test';
const fn = new Function('a', 'b', 'c', 'console.log("function works");');

然后我发现虽然fn.name属性不可写,it seems to be configurable in ES2015。所以我继续使用Reflect.defineProperty更改了它:

Reflect.defineProperty(fn, 'name', { configurable: true, value: fnName });
console.log(fn.name); // 'test'

当我将函数输出到字符串时,它仍然具有名称anonymous,因此我覆盖了toString函数:

const originalToString = fn.toString;
fn.toString = function() {
    return originalToString.call(this).replace('anonymous', fn.name);
}
fn.toString();
// "function test(a, b, c) {
// console.log("function works");
// }"

然而,当我把它放入控制台时,我无法弄清楚如何更改显示的名称:

enter image description here

有没有办法做到这一点,或者这只是JS运行时的某些内部属性无法触及?

PS:这是一个纯粹的学术问题。

0 个答案:

没有答案