如果我希望函数在第一次运行时执行不同的操作,我可以在每次运行时检查它是否是第一次,或者我可以更改函数;像这样的东西:
foo=function(a,b){
...do something1...
foo=_foo;
}
_foo=function(a,b){
...do something2...
}
这很糟糕;如果是这样,为什么?有一个更好的方法吗?我特意想在javascript中实现这一点,但会考虑其他语言点。
答案 0 :(得分:1)
严格来说,这不是一个“自我修改”的功能 - 你不会动态修改任何代码(而 会坏),只需为其分配另一个值功能名称。在大多数情况下这很好,并使多态代码非常简单和优雅。为了使意图更清晰,您可以将“第一次”代码分解为单独的函数:
function firstTimeFoo() {
.....
foo = normalFoo
}
function normalFoo() {
...
}
foo = firstTimeFoo