我想为新功能指定一个名称,这可能吗?
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]
答案 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的技术。