javascript 中的中间件的本质

http://cnodejs.org/topic/53f2b7af8f44dfa35140bca1

 

本质就是一个函数栈的调用,在调用的时候传如参数,类似一种钩子,也像插件,但是插件是一个功能整体的扩展.

里面还提到了pipe 这个 在函数式编程中是一个非常形象有用的比喻.

 

补充一下关于钩子:

for(let f in window) {if(f == 'a')console.log(window[f])}

 

var m = window.alert
window.alert = function(str){m('prefix: ' + str)}

 

如果有个全局的函数或者变量是a  就可以通过这种方式索引,注意变量和函数名相同都是可以覆盖的.

https://segmentfault.com/q/1010000004335505?_ea=573129

这里其实就是利用了javascript 的函数可以把引用存在变量中,等待一个合适的实际再调用的机制,

调用可以用call,apply,bind+调用等等.

var oriAlert = window.alert;
window.alert = function(txt){
    //改造函数
    oriAlert(txt);
}

 

参照:http://www.cnblogs.com/baochuan/archive/2012/06/11/2542048.html

// 处理钩子的对象
var hook = (function(){
    return {
        timer:null,
        init:function(){
            this.callHooks('init');
        },  
        callHooks:function(init){
            var s = "hook_" + init + '_event',
            f = []; 
            for(var h in window){
                if(h.indexOf(s) != 0) continue;
                f.push(h);
            }   
            this.hooksTimeout(f);
        },  
        hooksTimeout:function(hooks){
            if(0 === hooks.length){
                if(this.timer) clearTimeout(this.timer);
                return;
            }   

            var h = hooks.shift();
            window[h].apply();
            window[h] = undefined;

            window.setTimeout(function(){hook.hooksTimeout(hooks);}, 200);
        }   
    }   
}());

// 钩子1
var hook_init_event_tpl_html = function(){
    document.getElementById('test').innerHTML = 'This is HTML!';
}

// 钩子2
var hook_init_event_tpl_console = function(){
    console.log('This is console!');
}

// 最好在页面加载完之前调用,也就是在window.onload()之前
hook.init();

关于插件 个人觉得就是一种 全局扩展:

http://www.jb51.net/article/60419.htm   jquery 插件编写

我更有兴趣的是vue,react,webpack,node 中的插件的编写.

 

posted @ 2017-07-07 20:25  JonasYu  阅读(448)  评论(0编辑  收藏  举报