您的位置:首页 > Web前端 > JavaScript

javascript的prototype实现回调

2015-11-04 20:18 621 查看
Function.prototype.andThen=function(g) {
var f=this;
return function() {
f();g();
}
};
function Manager() {
this.callback=function () {alert("origin")}; // do nothing
this.registerCallback=function(callbackFunction) {
this.callback=(this.callback).andThen(callbackFunction);
}
}
function sayHi(){
alert("Hi");
}
function sayBye(){
alert("Bye");
}
function sayW(){
alert("W");
}
var manager=new Manager();
manager.registerCallback(sayHi);
manager.registerCallback(sayBye);
manager.registerCallback(sayW);
manager.callback();

模糊中。。。怎么回调的,而且每个函数被注册的都被调用都调了?。

var b = a.add();
undefined
Function.prototype.add = function(){alert("g");return function(){alert("g");}};
function (){alert("g");return function(){alert("g");}}
Function.prototype.add = function(){alert("g");return function(){alert("k");}};
function (){alert("g");return function(){alert("k");}}
a.add().add();
function (){alert("k");}
a.add().add().add();
function (){alert("k");}
a.add().add().add()();
undefined

终于测试一下:实现这个奇怪的回调必须具备两个条件:

1、往Function(注意是首字母大写的)对象的prototype中加函数。

2、在那个prototype添加的函数中返回一个新函数,新函数中内容自设。

操作1之后的每个函数(也是对象)都具备那个新建的函数,可以迭代调用,因为每调用一个又返回一个新函数,而可以在前面函数屁股户继续调用,。。。

如此无穷尽也。

而上面的回调也基于此。

因为每次都重新把函数对象赋值,创建后又继续赋值给原来的对象,这样对象内部不会消除,反而一个接一个添加到其中,这主要由于f=this;起到了至关重要的作用。

大概作用原理就像下面这样:

f = f( out ;);

f = f( out;f());

f = f( out;f());

f = f();

输出:out out out
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: