函数封装

用原生JS封装一个Table组件

怎甘沉沦 提交于 2020-02-15 01:39:22
在写项目的时候,我们经常会用一些组件,比如:模态框、表格、分页等。组件的应用大大减少了项目的开发成本,同时也提高了代码的质量等。所以,封装组件成为了每个人的必须拥有的技能。本篇文章将使用原生JS封装一个Table组件。 组件封装 实现目标 以antd中的Table组件为目标,实现以下功能: 传width值控制表格宽度。 columns与dataSource中的数据相对应,没有对应数据的地方显示为空。 实现columns中的render函数方法。 对columns数据中key值的检查,没有或者重复,给出警告。 columns中width可设置列宽 columns中align值控制内容在表格中所处的位置。 搭建结构 首先,先搭建一下代码的结构 window.Table(function(){ class Table { constructor(options) { // 获取所需要数据 this.columns = options.columns; this.dataSource = options.dataSource; this.width = options.width; this.init(); // 调用初始化函数 } // 初始化 init() { } } return function proxy(options = {}) { options = Object

RAII手法封装的互斥器mutex和条件变量condition类

坚强是说给别人听的谎言 提交于 2020-02-13 03:45:39
目录 RAII手法封装的互斥器mutex和条件变量condition类 前言 概要 原则 宏定义部分 互斥锁(Mutex) 条件变量(Condition variable) 倒计时(CountDownLatch) 死锁调试 小结 RAII手法封装的互斥器mutex和条件变量condition类 前言 近来在学习陈硕老师的muduo库,阅读了里面RAII手法封装的线程安全互斥锁的源码,期间遇到很多问题,包括有些宏对新手非常不友好等,解决这些问题花了很多时间,结合源码和自己的思考以及查阅的资料,本文记录下相关的 难点 ,如有错误,欢迎指正交流。 概要 首先谈谈什么是 RAII ,用自己的话说RAII的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。RAII在C++中应用很广泛,用于管理资源、避免内存泄露。 原则 muduo库遵循以下几个原则: 用RAII手法封装mutex的创建、销毁、加锁、解锁这四个操作。 只用非递归的mutex(即不可重入的mutex) 不手工调用lock()和unlock()函数,一切交给栈上的Guard对象的构造和析构函数负责。 每次构造Guard对象的时候,思考一路上(调用栈上)已经持有的锁,防止因加锁顺序不同而导致死锁(deadlock)。由于Guard对象是栈上对象

python 学习笔记7 面向对象编程

你说的曾经没有我的故事 提交于 2020-02-10 15:56:12
一、概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 二、创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。   类就是一个模板,模板里可以包含多个函数,函数里实现一些功能   对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 #创建类 class Foo: #class 关键字,表示要创建类,Foo 类名称 #创建类中的函数 def Bar(self): #self 特殊参数,必填 #do something # 根据类Foo创建对象obj obj = Foo() class是关键字,表示类 创建对象,类名称后加括号即可 #创建类 class Dog(object): def __init__(self,name): #构造函数,构造方法 ==初始化方法 self.NAME = name def sayhi(self): #类的方法 print("hello , I am a dog. my name is", self.NAME ) def eat(self,food): print("%s is eating %s" %(self

《领域驱动设计》学习笔记

走远了吗. 提交于 2020-02-10 00:55:12
【第一部分】运用领域模型 第1章:消化知识 有效的建模要素 (1)模型和实现的绑定 (2)建立了一种基于模型的语言 (3)开发一个蕴含丰富知识的模型 (4)提炼模型 (5)头脑风暴和实验 【学习心得】:千万不要用自己有限的思维规划完整的图形,持续学习、消化、输出(讨论)、沉淀,所有道理都是一致的。 第2章:交流语言与使用 模式:UBIQUITOUS LANGUAGE(通用语言) 术语的交集产生了UBIQUITOUS LANGUAGE 想要创建种灵活的、蕴含丰富知识的设计,需要一种通用的、共享的团队语言,以及对语言不断的试验——然而,软件项目上很少出现这样的试验。 如果语言支离破碎,项目必将遭遇严重问题。领域专家使用他们自己的术语,而技术团队所使用的语言则经过调整,以便从设计角度讨论领域。日常讨论所使用的术语与代码(软件项目的最重要产品)中使用的术语不一致,甚至同一个人在讲话和写东西时使用的言语也不一致,这导致的后果是,对领域的深刻表达常常稍纵即逝,根本无法记录到代码或文档中。翻译使得沟通不畅,并削弱了知识消化。然而任何一方的语言都不能成为公共语言,因为它们无法满足所有的需求。 【学习心得】:在自己有限的项目经验里,说沟通成本占据项目总成本的八成都不为过,就像本书一开始的重点,就是无处不在的语言。这语言可以是人话、可以是图形、可以是表格,重点在于可以帮助项目高质量高效率的落地

python day22

有些话、适合烂在心里 提交于 2020-02-09 01:02:56
今日内容: 封装: 什么是封装? 将复杂的丑陋的, 隐私的细节隐藏到内部,对外提供简单的使用接口 对外隐藏内部实现细节,并提供访问的接口 为什么要封装? 两个 目的 : 1.为了保证关键数据的安全性 2.对外隐藏实现细节,隔离复杂度 什么时候应该封装? 当有一些 数据 不希望外界可以直接修改时 当有一些 函数 不希望给外界使用时 如何使用(语法): # 封装的基本使用 class Person: def __init__(self,id_number,name,age): self.__id_number = id_number self.name = name self.age = age def show_id(self): print(self.__id_number) p = Person('111111','jack',20) p.id_number = '222222' print(p.__id_number) # 222222 被封装的内容的特点: 1.外界不能直接访问 2.内部依然可以使用 权限: 定义: 学习了封装后就可以控制属性的权限 在python只有两种权限: 1.公开的,默认就是公开的 2.私有的,只能由当前类自己使用 在外界访问私有的内容: 属性虽然被封装了,但是还是需要使用的 在外界可以通过定义方法类完成对私有属性的修改和访问 # 封装方法 class

jquery插件封装

為{幸葍}努か 提交于 2020-02-08 18:46:47
2018-01-30 #jquery插件封装 入门 编写一个jQuery插件开始于给jQuery.fn加入​​新的功能属性,此处添加的对象属性的名称就是你插件的名称: jQuery.fn.myPlugin = function(){ //你自己的插件代码 }; 用户非常喜欢的$符号哪里去了? 它仍然存在,但是,为了避免和其他JavaScript库冲突,我们最好将jQuery传递给一个自我执行的封闭程序,jQuery在此程序中映射为$符号,这样可以避免$号被其他库覆写。 (function ($) { $.fn.m​​yPlugin = function () { //你自己的插件代码 }; })(jQuery); 在这个封闭程序中,我们可以无限制的使用$符号来表示jQuery函数。 环境 现在,我们可以开始编写实际的插件代码。 但是,在这之前,我们必须得对插件所处的环境有个概念。 在插件的范围里, this关键字代表了这个插件将要执行的jQuery对象, 这里容易产生一个普遍的误区,因为在其他包含callback的jQuery函数中,this关键字代表了原生的DOM元素。这常常会导致开发者误将this关键字无谓的包在jQuery中,如下所示。 (function ($) { $.fn.m​​yPlugin = function () { //此处没有必要将this包在$号中如$

面向对象

旧巷老猫 提交于 2020-02-08 15:49:37
面向对象的三大特性 一、多态 python是弱类型语言,不需要在变量的声明中明确变量的数据类型 python没有多态,但又处处是多态。 python有鸭子类型 看着是鸭子,就是鸭子 不同的类中存在相同的方法,这些方法的功能也类似,那么这些类就被称为鸭子(例如:字符串类、列表类、字典类等都具有index属性) 二、继承 继承分为单继承和多继承,多继承遵循的是从左往右的原则,左侧优先。 python3中的继承原则采用的是广度优先原则,继承类都是新式类;python2采用的是深度优先,继承的都是经典类 python3中的子类和派生类只能继承父类中的公有变量和方法,不能继承父类中的私有方法和私有动态变量、私有静态变量。 三、封装 “ 封装 ”就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类) 封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。 封装的好处 封装后外部的使用者只需要传递出响应的参数,就可以通过对象调用内部的数据和方法,而不需要知道内部的实现方式 封装后如果需要新的方法,可以在类中添加。 广义的封装:给对象封装属性,给类中封装静态字段、属性以及构造方法。 狭义的封装:私有制、私有成员 私有成员:静态私有字段、私有方法、私有属性 只能在本类中被调用 ###四、什么是面向对象 什么时候用

AJAX---基本的封装

北城以北 提交于 2020-02-08 15:45:29
基本的封装 函数就可以理解为一个想要做的事情,函数体中约定了这件事情做的过程,直到调用时才开始工作。 将函数作为参数传递就像是将一个事情交给别人,这就是委托的概念 封装: 1. 写一个相对比较完善的用例 2. 写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体 3. 根据使用过程中的需求抽象参数 AJAX 请求封装 /** * 发送一个 AJAX 请求 * @param {String} method 请求方法 * @param {String} url 请求地址 * @param {Object} params 请求参数 * @param {Function} done 请求完成过后需要做的事情(委托/回调) */ <script> // 封装者============================= function ajax(method, url, params, done) { method = method.toUpperCase() var xhr = new XMLHttpRequest() if (typeof params === 'object') { var tempArr = [] for (var key in params) { var value = params[key] tempArr.push(key + '=' + value) }

PHP封装清除目录下的所有文件函数

白昼怎懂夜的黑 提交于 2020-02-08 09:44:25
由于经常会遇到定期清除日志或者定期清除过期文件的需求,网上查阅了部分资料,借鉴了一位大佬的思想方法,有了如下感悟 1.PHP清除目录下的所有文件(测试使用版) function deldir ( $path ) { echo $path ; echo PHP_EOL ; //如果是目录则继续 if ( is_dir ( $path ) ) { //扫描一个文件夹内的所有文件夹和文件并返回数组 $p = scandir ( $path ) ; foreach ( $p as $val ) { //排除目录中的.和.. if ( $val != "." && $val != ".." ) { //如果是目录则递归子目录,继续操作 //is_dir() 函数检查指定的文件是否是一个目录 if ( is_dir ( $path . '/' . $val ) ) { //子目录中操作删除文件夹和文件 $this - > deldir ( $path . '/' . $val . '/' ) ; //目录清空后删除空文件夹 @ rmdir ( $path . '/' . $val ) ; print_r ( '删除空目录' . $path . '/' . $val ) ; echo PHP_EOL ; } else { //如果是文件直接删除 unlink ( $path . $val ) ;

Java面向对象大致梳理

你。 提交于 2020-02-07 21:19:19
面向对象思想、 面向对象思想概述: Java设计语言面向对象: Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面 向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现。 类和对象: 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物 属性:就是该事物的状态信息。 行为:就是该事物能够做什么。 对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性 和行为。 类与对象的关系 : 类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。 类是对象的模板,对象是类的实体。 面向对象之封装: 概述: 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。