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

前言

今天给大家纯手工整理一下本人在开发中认为比较有用的代码思想套路,欢迎大家可以与我一同讨论

链式编程

所谓链式编程即是函数调用后返回对象本身

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

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

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

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中任何问题都可以通过中间层来解决,比如我们写了一个吃饭的功能,突然想起来饭前要洗手,那么怎么做呢?用你想想的中间层来对比我写的中间层,想想看有什么不同?!

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:‘凃老师‘}来源:站长平台

原文地址:https://www.cnblogs.com/1994july/p/12412026.html

时间: 2024-10-31 01:25:37

开发中比较容易理解的代码套路的相关文章

iOS开发中一些有用的小代码

1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@&qu

iOS开发中经常用的实用代码合集

iOS开发中经常用的实用代码合集 本文整理了,在iOS开发中我们所遇到一些开发问题的技巧类的代码,让你在开发过程中避免了很多弯路,希望能给你的开发带来帮助和启发. 1.判断邮箱格式是否正确的代码: // 利用正则表达式验证 -( BOOL )isValidateEmail:( NSString  *)email { NSString  *emailRegex =  @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}&

五年干货分享!前端开发中最常用的JS代码片段

很多网友私信我,说学到js就开始卡壳了,甚至初略的看了一下js,就跳过开始学习框架之类的.这里要提醒你,js是前端的重中之重,如果你忽视了,后果不堪设想! 学好,并熟练的运用这门编程语言真的很难吗?本篇文章为大家总结了一些前端开发中最常用的JS代码片段,希望能对大家的学习以及工作上都能有所帮助,有所收获. HTML5 DOM 选择器 javascript 代码 // querySelector() 返回匹配到的第一个元素 var item = document.querySelector('.i

***iOS开发中@selector的理解与应用

@selector 是什么? 1一种类型 SEL2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString() / NSSelectorFromString() 3可以理解为类似函数指针的东西--是能让Objective-C动态调用方法的玩意.--是 object-c 的动态后绑定技术 可以通过字符串 访问的函数指针4其实就是消息响应函数---选一个消息响应的函数地址给你的action[email protected](function_name)

在嵌入式开发中应该这样理解嵌入式C编程

一.新手常常问的一个问题:C语言和嵌入式C编程有什么区别?而嵌入式工程师一般都会告诉你,其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也是不一样的.不同于一般形式的软件编程,基于特定的硬件平台嵌入式系统编程的,势必要求其编程语言具备较强的硬件直接操作能力.毫无疑问,汇编语言是具备这种特点的.然而,由于该语言编写开发过程的复杂性,通常不选择它用于嵌入式系统开发,而C语言是一种"低层次"的语言,已经成为嵌入式系统开发的最佳选择

iOS开发中Block的理解与使用

简介 我们可以把Block当做Objective-C的匿名函数.Block允许开发者在两个对象之间将任意的语句当做数据进行传递,往往这要比引用定义在别处的函数直观.另外,block的实现具有封闭性(closure),而又能够很容易获取上下文的相关状态信息. block是代码块,其本质和变量类似.不同的是代码块存储的数据是一个函数体.使用Block,就可以像其他标准函数一样,传入参数,并得到返回值. block的格式: a:Block的返回值类型,可以为空(void); b:Block对象名称,可

实际开发中 dao、entity的代码怎样自动生成?一款工具送给你

01 关注"一猿小讲"朋友,都知道以往的文章一直倡导拒绝 CRUD,那到底什么是 CRUD?今天咱们就聊聊 Java 妹子小猿与数据库老头交互的事儿. 产品小汪铿锵有力的说:小猿同学,咱们近期要推一爆款产品,你先实现用户基本的登录的功能. 啥玩意?小猿内心嘀咕嘀咕:爆款产品,还基本的登录,那不就是实现用户的 CRUD(增删改查)么? 小汪一句话,累死三军.扯皮一上午的会议终于结束了,于是小猿便叫了个外卖,填补了肚子的空虚后,小猿习惯性的在脑海里,开始了爆款产品的从 0 到 1 的脑图搭

前端开发中最常用的JS代码片段

HTML5 DOM 选择器 // querySelector() 返回匹配到的第一个元素 var item = document.querySelector('.item'); console.log(item); // querySelectorAll() 返回匹配到的所有元素,是一个nodeList集合 var items = document.querySelectorAll('.item'); console.log(items[0]); 阻止默认行为 // 原生js document.

对软件开发中uml建模的理解和图形整理(一)

由于uml(统一建模语言)在开发中经常会用到,特别是在软件开发中的OOAD阶段,因此要理解和使用uml显得尤为重要.在uml开始之前,咱先回顾一个OOAD.OOP的主要特征. OOAD:根据面向对象的方法学来对软件系统进行分析和设计的过程.它包括OOA 分析阶段和OOD设计阶段.其中分析阶段主要解决"What to do?"的问题,而设计阶段主要解决"How to do?"的问题.具体来说就是:在OOA分析阶段咱要做的主要工作就是建立对业务问题域的视图(建立模型).