JavaScript中最简单的自修改函数?

JavaScript中最简单的自修改函数?,javascript,function,reflection,eval,self-modifying,Javascript,Function,Reflection,Eval,Self Modifying,我想研究和摆弄一下自修改函数,知道JavaScript有eval和其他有趣的特性,比如让函数从内部打印其主体,我想我想用JavaScript做一些自修改函数测试 我想要一个简单的函数,当被调用时,它会根据任何规则修改自己 就像某些函数可以首先执行一个简单的控制台.log,下次调用它时,它将执行警报。这显然可以通过if实现,但我在这里寻找的是实际的物理功能应该首先如下所示: function selfm() { console.log('hello') // + modify se

我想研究和摆弄一下自修改函数,知道JavaScript有
eval
和其他有趣的特性,比如让函数从内部打印其主体,我想我想用JavaScript做一些自修改函数测试

我想要一个简单的函数,当被调用时,它会根据任何规则修改自己

就像某些函数可以首先执行一个简单的
控制台.log
,下次调用它时,它将执行
警报。这显然可以通过
if
实现,但我在这里寻找的是实际的物理功能应该首先如下所示:

function selfm()
{
    console.log('hello')
    // + modify self here somehow
}
在第一次通话后:

function selfm()
{
    alert('hello')
}

如何以最简单的形式实现这种行为?

这可能不是一个很好的解决方案,但希望能有所帮助

function selfm(str){
 this.print = eval("(function a() {"+str+"})") ;
 this.print();
} 
然后,您可以使用希望函数充当的任何字符串参数调用

selfm("console.log('Hello');");
// will print Hello in console.

selfm("alert('Hello');");
// will alert Hello

仍然需要在不同的浏览器上进行测试。:)

这可能不是一个很好的解决方案,但希望能有所帮助

function selfm(str){
 this.print = eval("(function a() {"+str+"})") ;
 this.print();
} 
然后,您可以使用希望函数充当的任何字符串参数调用

selfm("console.log('Hello');");
// will print Hello in console.

selfm("alert('Hello');");
// will alert Hello

仍然需要在不同的浏览器上进行测试。:)

或者,您可以实现一个函数,该函数接受一个选择器函数和一个要调用的其他函数数组。所以选择器会选择调用哪一个,然后调用它。清晰、易于维护/测试,没有难看的运行时突变。@zerkms没有抓住我的重点。我想做一个函数,当它被调用时,可以从内部编辑它自己,这样函数的实际结构在调用后就会改变。问题还在于完全丢失函数调用前的外观信息。这不是问题所在,这是一个丑陋的解决方案。解释需要如此奇怪的解决方案的原始问题。只是XY的另一个例子problem@zerkms最初的“问题”是,我想检查自修改函数在JavaScript中是如何工作的,但我无法提出一个自修改函数。这只是我在做私人摆弄,所以解决方案的丑陋并不重要。或者你可以只实现一个函数,它接受一个选择器函数和一个要调用的其他函数数组。所以选择器会选择调用哪一个,然后调用它。清晰、易于维护/测试,没有难看的运行时突变。@zerkms没有抓住我的重点。我想做一个函数,当它被调用时,可以从内部编辑它自己,这样函数的实际结构在调用后就会改变。问题还在于完全丢失函数调用前的外观信息。这不是问题所在,这是一个丑陋的解决方案。解释需要如此奇怪的解决方案的原始问题。只是XY的另一个例子problem@zerkms最初的“问题”是,我想检查自修改函数在JavaScript中是如何工作的,但我无法提出一个自修改函数。这只是我在私下摆弄,所以解决方案的丑陋并不重要。这实际上是一个有趣的解决方案,从某种意义上说,它给了我一些好的想法,让我知道我为什么要在这里尝试实现。从某种意义上说,它只是eval包装到另一个函数中,但它有一些优点。这实际上是一个有趣的解决方案,从某种意义上说,它给了我一些好的想法,让我知道我为什么要在这里实现它。在某种意义上,它只是eval包装到另一个函数中,但它有一些优点。