JavaScript中最简单的自修改函数
Simplest self-modifying function in JavaScript?
我想研究和摆弄自修改函数,知道JavaScript有eval
和其他有趣的反射式功能,比如让函数从内部打印它的主体,我想用JavaScript做一些自修改函数测试。
我想要一个简单的函数,当被调用时,它会根据任何规则来修改自己。
就像某个函数可以先做一个简单的console.log
,然后下次调用它时,它会改为做alert
。这显然可以用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
仍然需要在不同的浏览器上进行测试。:)
如果你只需要它自己更改一次,那么你可以这样做:
var selfm = function () {
console.log('hello');
selfm = function () {
alert('hello');
};
};
selfm()函数将打印";你好";然后将其自身改变为显示";你好";之后每次都要提醒。
这在需要运行一些复杂代码的情况下可能很有用,但在运行一次之后,每次都会产生相同的结果。通过使用该方法,您可以优化这样的函数,使其立即返回相同的结果,而不是每次都重新进行计算。
//basic example
let myFunction=function(){
console.log("previous code!");
myFunction=new Function("console.log('new code!');");
}
myFunction(); //previous code!
myFunction(); //new code!
//Javascript self modifying function
function operation(operator,num1,num2){
//storing reference
let temp=operation;
let mod=`"console.log(num1${operator}num2)"`;
//performing modification
operation=new Function("num1,num2",eval(mod));
operation(num1,num2);
//restore original reference
operation=temp;
}
operation("+",10,20); //30
operation("-",20,10); //10
operation("*",10,20); //200
operation("/",20,10); //2
相关文章:
- 使用 JQuery 修改函数写入文档的数据
- 如何修改函数内部的全局变量
- Javascript-修改函数或从字符串中计算函数
- 修改函数以从类外部访问私有变量
- 修改函数中的javascript变量
- 直接修改函数有多危险
- 运行时的 Java 脚本修改函数
- Javascript - 修改函数内的全局变量
- Javascript:修改函数以动态创建表
- 修改函数以计算到新的一年,而不是返回值 12/33/2014
- 修改函数以使用 html 类而不是 id
- JavaScript中最简单的自修改函数
- 实现JQuery Scrollbox-修改函数-不确定如何实现
- 如何在循环中创建新变量的同时修改函数参数
- 当函数的属性函数被调用时,是否可以修改函数本身
- 修改函数内部的JavaScript对象,如果出现错误,则返回原始对象
- 访问和修改函数内外的变量
- 通过参数修改函数内部的全局变量
- JavaScript修改函数参数和使用函数
- 修改函数以显示最大窗口高度减去20%