JavaScript拥有各种疯狂的灵活性.我决定利用它并在第一次调用时自行更改功能.这是一件坏事吗?它的工作原理如下:
(function(){
var nextAfter = function(){};
Something.prototype.next = function(){
//do pre-start actions.
this.next = nextAfter;
};
})();
Run Code Online (Sandbox Code Playgroud)
此函数在主循环内部调用,因此它被多次调用,但实例只是"假设"实例化一次.
这是完全合理的事情.
例如,它可以是在状态机中实现状态更改的有用方法,但我确信您可以找到许多其他用途.
您可能还想了解如何使用闭包实现相同的功能 - 根据用例,它可能更干净.
编辑; 没有改变原型的闭包的例子
Something = (function(){
var next = function() { next = nextAfter; console.log("A"); }
var nextAfter = function() { console.log("B"); }
return {
next: function(){ next(); }
}
})();
Run Code Online (Sandbox Code Playgroud)
闭包的好处是你不会改变该对象类型的全局原型函数,现在你可以有多个独立的对象,每个闭包对象可以保持自己的状态.