jQuery源码分析之Callbacks详解

2020-05-23 06:21:26易采站长站整理

                    fired: function () {//这个callbacks是否执行过
                        return !!fired;
                    }
                };
            };
            //注册到window下
            window.Callbacks = Callbacks;
        }(window));

然后我们测试一下这个Callbacks:


        var test = new Callbacks();
        test.add(function (value) {
            console.log(‘函数1,value是:’ + value);
        });
        test.add(function (value) {
            console.log(‘函数2,value是:’ + value);
        });
        test.fire(‘这是函数1和函数2的值’);
        console.log(‘查看函数是否执行过:’ + test.fired());
        test.disable();//废弃这个Callbacks
        console.log(‘查看函数是否被废弃:’ + test.disabled());
        test.add(function () {
            console.log(‘添加第三个函数,这个函数不应该被执行’);
        });
        test.fire();

打开浏览器的控制台我们可以看见运行结果正常。

once和auto(memory)实现

once:
once让这个callbacks中的函数运行一次之后就不再运行。原理非常的简单,上面的代码中,我们可以看见有一个变量list承接函数列表,所以我们只需要把过去执行过的代码清空即可。我们用一个全局变量,保存当前执行模型,如果是once模型,就在fireWith()里让这个list失效即可:


(function (window, undefined) {
            var Callbacks = function (once) {
                //通过闭包保护这些私有变量