开发中比较容易理解的代码套路

前言

今天给你们纯手工整理一下本人在开发中认为比较有用的代码思想套路,欢迎你们能够与我一同讨论编程

链式编程

所谓链式编程便是函数调用后返回对象自己数组

var calculator = {
    total:0,
    add (n) {
        // 模拟执行功能
        this.total += n;
        // 为了能在调用完add()后继续.substruct() 所以咱们返回对象自己
        return this;
    },
    subtract(n) {
        this.total -= n;
        return this;
    }
}
// 调用
calculator.add(5).add(5).subtract(2).total; // 8复制代码

高阶函数应用-(添加数据并提供删除方法)

举个栗子:咱们有一些业务须要添加元素到数组中,但同时也可能过会又要将其移除。更好的方式是咱们把他们封装成函数,并利用高阶函数闭包的特性来标记删除,这样就减小了去查找这个元素的问题了promise

var students = [];
function addStudent (stu) {
    // 加入  经过形参标记该学员
    students.push(stu);
    return function () { 
        // 利用闭包获取stu
        var index = students.indexOf(stu);
        // 删除该学生
        students.splice(index);
    }
}
var stu = { name:'小明' };
// 试用一下
var stu1 = addStudent(stu);
var stu2 = addStudent({name:'小红'});
// 一年想到须要删除了,咱们不须要查找他们了
stu1(); // 删除小明
stu2(); // 删除小红
复制代码

利用Promise链切入(延迟执行)

Promise不只能够帮助作异步流程控制,同时啥步流程控制也能作,固然更重要是延迟执行和异步中保证顺序,好比步骤A到步骤B,中间咱们要等等,也步肯定啥时候完成,所以能够先定义好两个步骤,把A步骤的resolve保存起来等待须要调用的时候调用便可(不要试图和回调函数去比较,由于Promise自己就是为了解决回调函数不优雅的问题)闭包

// 任务A
function task1() {
    setTimeout(function(){
        // 第一件事
    },2000);
}
function task2() {
    setTimeout(function(){
        // 第二件事
    },1000);
}
// 我先让第一件事执行,并保存其实例和resolve
var token = (function(){
    var next;
    var p = new Promise(function(resolve){
        // 获取放行的钥匙
        next = resolve;
        task1();
    });
    return {
        promise:p,
        next:next
    }
})();
// 定义第二件事
token.promise.then(task2);
// 想让第二件事执行的话,看我心情咯,来个定时器吧
setTimeout(function () {
    // 就如今吧,作第二件事吧(延迟执行)
    token.next();
},Math.random() * 1000 );


复制代码

经过中间层来解决问题(装饰者模式)

不是有句话是JS中任何问题均可以经过中间层来解决,好比咱们写了一个吃饭的功能,忽然想起来饭前要洗手,那么怎么作呢?用你想一想的中间层来对比我写的中间层,想一想看有什么不一样?!dom

var obj = {
    eat:function () {
        console.log('我愉快的吃饭..');
    }
}
obj.wash = function () {
    console.log('洗手');
}
// 装饰者模式
obj.plus = function (fn1,fn2) {
    fn1();
    return fn2(); 
}
// 忽然学习到《《《饭前要洗手》》》,怎么办?
obj.plus(obj.wash,obj.eat);复制代码

单例模式

有时咱们须要全局中有一个惟一的实例,而不是new一次就一个的时候,就用下面代码吧,不过细节要注意如下异步

var Leader = (function() {
    var instance; // 闭包不让外部访问
    return function (name) {// 构造函数
         if (instance) return instance;
         instance = this;
         this.name = name;
    }
})();

new Leader('凃老师'); // { name:'凃老师'}
new Leader('启道学院'); // { name:'凃老师'}复制代码

图片

相关文章
相关标签/搜索