有没有办法可变地命名一个函数

时间:2015-07-25 04:51:14

标签: javascript function variables

我想为新功能指定一个名称,这可能吗?

function returnFunctionWithName(str){
  return function(){
    return srt
  }
}

var x = returnFunctionWithName("hello")

console.log(x) // => [Function]

我想要的是这样的:(这不起作用)

function returnFunctionWithName(str){
  return function [str](){
    return srt
  }
}

var x = returnFunctionWithName("hello")

console.log(x) // => [Function: hello]

刚试过这个也没效果:

function returnFunctionWithName(str){
  var x = function(){
    return str
  }
  x.name = str
  return x
}

var x = returnFunctionWithName("hello")

console.log(x) // => [Function: hello]

2 个答案:

答案 0 :(得分:0)

您可以在技术上设置函数的name属性,如下所示:

Object.defineProperty(theFunction, 'name', {
    get: function() { 
        return 'NewFunctionName'; 
    }
});

但是,我不知道这是否能解决您的问题,因为在我的quick tests中,当console.log执行此功能时,这实际上并未呈现预期的名称。

x.name = str不起作用的原因是Function#name isn't writable。它,但是,“可配置”,这意味着你可以通过Object.defineProperty()搞砸它。

答案 1 :(得分:-1)

我发现做你所问的唯一的跨浏览器方式在许多情况下实际上是非常不安全的......所以,小心,答案如下。

 function makeNewFunction(name) {
    return eval('(function(){ return function ' + name + '() {' +
        ' // code as a string' +
        + '}; }) ();');
 }

前一段时间我不得不使用一种我称之为evilclassing的技术。