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();
模糊中。。。怎么回调的,而且每个函数被注册的都被调用都调了?。
终于测试一下:实现这个奇怪的回调必须具备两个条件:
1、往Function(注意是首字母大写的)对象的prototype中加函数。
2、在那个prototype添加的函数中返回一个新函数,新函数中内容自设。
操作1之后的每个函数(也是对象)都具备那个新建的函数,可以迭代调用,因为每调用一个又返回一个新函数,而可以在前面函数屁股户继续调用,。。。
如此无穷尽也。
而上面的回调也基于此。
因为每次都重新把函数对象赋值,创建后又继续赋值给原来的对象,这样对象内部不会消除,反而一个接一个添加到其中,这主要由于f=this;起到了至关重要的作用。
大概作用原理就像下面这样:
f = f( out ;);
f = f( out;f());
f = f( out;f());
f = f();
输出:out out out
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
相关文章推荐
- Javascript面试题
- 使用js脚本的好处以及其本身的特点
- JavaScript 函数调用时带括号和不带括号的区别!!!
- js获取当前城市名
- JS筛选器的制作
- JS筛选器的制作
- asp.net mvc + javascript导入文件内容
- asp.net mvc + javascript导入文件内容
- js两个判断&&的值与||的值
- asp.net mvc + javascript生成下载文件
- asp.net mvc + javascript生成下载文件
- JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念
- jsp小结12 - 9个内置对象05 page
- jsp小结11 - 9个内置对象04 out
- jsp小结10 - 9个内置对象03 exception
- js写基础insertAfter()方法
- js的with语句
- 以绝对路径的方式引入JavaScript和CSS文件
- js嵌套事件
- backbone.js