自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白话屋

不造轮子也开车~

原创 最详细的JavaScript高级教程(十九)函数表达式和闭包
原力计划

这一章我们介绍函数表达式,在开始的时候我们会复习到很多之前学过的知识。 定义 我们之前学过函数提升相关的知识,定义的函数会提升,定义的函数作为变量则不会提升,我们还举例说过下面的代码才能达到效果 var condition = false; var sayHi = null; if(conditi...

2020-06-05 10:47:43 121 0

原创 最详细的JavaScript高级教程(十八)高级原型链

经典继承(借用构造函数) 为了解决之前提到的超类型构造函数中引用类型的问题,我们可以使用借用构造函数的方式 function SuperType() { this.property = ['red']; } function SubType() { ...

2020-06-05 10:31:39 107 0

原创 最详细的JavaScript高级教程(十七)原型链
原力计划

概述 首先说明,学习原型链的知识是为了更好的理解原型和原型对象,在实际应用中很少单独使用下面介绍的原型链,具体的原因是下面提到的它的缺点。 我们复习一下之前的知识: 构造函数的prototype指向了原型对象 原型对象中constructor指向了构造函数 实例中的__proto__指向了原型对...

2020-06-05 10:25:31 162 0

原创 最详细的JavaScript高级教程(十六)创建对象
原力计划

创建一个对象再给这个对象赋值的操作需要大量的代码,如果要创建多个对象,就要写很多重复代码,对象的创建可以使用下面这些方法来避免写大量的不好维护的重复代码。 工厂模式 优点:创建一个对象的大量实例 缺点:无法进行对象识别,即使用工厂模式创建的对象,还是Object对象,不是一种新的对象,也就不能使...

2020-06-05 10:07:29 103 0

原创 最详细的JavaScript高级教程(十五)对象的属性
原力计划

概念 ES对于对象的定义是:无序属性的集合,其属性可以包括基本值,对象或者函数。从中我们可以发现,js中的对象有下面的特征 无序的集合,这个就让js中的对象更像是散列表,是一系列无序的键值对的集合 属性包括基本值,对象或者函数。这个把属性可以包括哪些数据类型说的很清楚了 属性类型 ES中有下面...

2020-06-04 15:30:16 96 0

原创 最详细的JavaScript高级教程(十四)单体内置对象
原力计划

定义 由语言本身实现,不依赖宿主对象,不用初始化即可使用的对象,我们可以理解在语言所有初始化开始之前就初始化完成的对象。一共由下面五个: Object Array String Global Math Global的方法 全局对象,可以认为是终极对象,所有不属于其他对象的属性和函数都是全局对象...

2020-06-04 15:10:16 66 0

原创 最详细的JavaScript高级教程(十三)包装类型
原力计划

概念 在讲js中包装类型的概念的时候我们想到在C#中,同样有包装类型的概念。基本类型不能有属性和方法,而string,int等都是基本类型,讲道理他们不该有int.parse这种使用,但是我们在别的语言中,经常使用这种语法,为什么呢? 这时候我们想到,C#中有String对象,大小写只差,stri...

2020-06-04 15:02:39 77 0

原创 最详细的JavaScript高级教程(十二)函数
原力计划

函数也是对象,也是引用类型。 定义 两种定义方法都是等价的 function sum(arg1, arg2){ return arg1 + arg2; } var sum2 = function(arg1, arg2){ return arg1 + arg2; } 函数指针 需...

2020-05-19 10:24:49 106 0

原创 最详细的JavaScript高级教程(十一)正则表达式
原力计划

正则表达式 概念 本节讲正则表达式在js中的使用,注意正则对象是一个引用类型。 初始化:字面量和对象使用 与对象的定义一样,我们可以使用字面量定义正则表达式,也可以使用正则对象来定义正则表达式,他们的区别是使用的转义有一定差别。 在使用字面量的时候,使用/ /把正则表达式包起来,后面可以写上匹配模...

2020-05-14 15:54:02 6591 10

原创 最详细的JavaScript高级教程(十)日期和时间 Date对象

概念 js中使用utc时间保存日期和时间,即1970年1月1日零点开始经过的毫秒数保存时间。Date类型是引用类型。 定义 注意新定义一个时间如果什么都不传,默认值是创建的时候的当前时间 var now = new Date(); var now = new Date(22334242); // ...

2020-05-14 15:10:40 68 0

原创 最详细的JavaScript高级教程(九)Array
原力计划

Array类型是js中常用的引用类型。js中的Array最大的特点就是:数组可以容纳多种类型的元素,数组在定义的时候不用指明元素类型,一个数组中可以混杂多种数据类型。 创建数组 // 使用Array对象初始化 // 需要预先知道元素数量 var colors = new Array(10); //...

2020-05-14 15:01:04 243 0

原创 最详细的JavaScript高级教程(八)值类型和引用类型

值类型和引用类型 在js中,除了Object,其他五种基本类型都是值类型,包括String也是值类型。 注意: 允许给引用类型动态的添加属性值,不允许给值类型添加属性值。// 基本类型,不能添加属性,会报错 var test = "sss"; test.name = &quo...

2020-05-11 10:57:38 89 0

原创 最详细的JavaScript高级教程(七)表达式

if语句 推荐if语句中的表达式不管是不是单行都用大括号括起来以简化阅读。 循环语句 JS中支持 do while语句 和 while语句,这两种的用法与其他语言相似,这里就不多赘述了,我们看一看for的一些特殊的例子,一看便明白 // 不存在块级作用域,所以外部也能访问 for(var i = ...

2020-05-11 10:49:25 128 0

原创 最详细的JavaScript高级教程(六)操作符
原力计划

写在前面 我曾经辅导过很多人编程,其中有学霸也有学渣,而编程这个事情,学霸经常会陷入一个 误区:所有的语法都要记住,所有的特性都要了如指掌才算精通。而我们所面对的笔试甚至一些面试也加深了这种印象,事实真的如此么? 对于枯燥的语法知识,我们要知其然,知其所以然,但是不需要死记硬背,我们的大脑善于记住...

2020-05-11 10:39:08 126 0

原创 最详细的JavaScript高级教程(五)数据类型
原力计划

ES5只有五种基本数据类型和一种复杂数据类型。 五种基本数据类型是: Undefined Null Boolean Number String 一种复杂类型是: Object Object本质上就是一个哈希表,有键值对构成 所有的值最终都是上述六种类型。使用typeof就可以获取值的数据类...

2020-05-11 09:23:38 178 0

原创 最详细的JavaScript高级教程(四)语法和变量
原力计划

特点 js大量借鉴了C,java,Perl的语法,十分的宽松 js是区分大小写的 变量,函数名 首字符必须是字母,下划线或者$ 推荐使用驼峰命名 注释 使用c格式的注释 // 这是一个注释 /* * 这是一个多行注释 * 除了开头结尾,每行前面的*不是必须的,但是推荐这么做 */ 严格...

2020-05-10 21:04:02 259 2

原创 最详细的JavaScript高级教程(三)script标签

引子 稍微学习过一点网页编写的同学都知道,网页中的js代码应该写在 script 标签中,但是为什么要这么做呢?本文就介绍一下script标签。 script 标签 最初,网景公司想要在浏览器中展示使用js的html文件,但是又不想影响这个文件在其他浏览器中的显示效果,于是创造了 script 标...

2020-05-10 20:11:12 240 0

原创 最详细的JavaScript高级教程(二)JavaScript和ECMAScript

JS和ES 每一个学习JS的同学都听说过ES5,ES6,但是,是否所有的同学都清除的知道他们之间的关系呢?我们通常认为这两个是一个东西,事实上他们的关系如下: 从上面的图中我们清除的看到,他们不是并列关系,而是包含关系,那么下面就分别介绍一下 ECMAScript 核心,它本身并没有输入和输出的...

2020-05-10 20:04:21 309 0

原创 最详细的JavaScript高级教程(一)简介

目标 要想全面的理解和掌握JS,关键在于弄清楚它的本质,历史,和局限性。 适用人群 会使用JS编程但是学习不系统的同学 有其他编程语言实践经验,想要了解JS的同学 想要为nodejs等打坚实基础的同学 版本号 通常我们说浏览器使用的js的版本号,是通过他们对于ECMAScript版本的兼容性来...

2020-05-10 19:57:23 330 0

原创 WPF高级教程(十八)行为
原力计划

介绍 在讲解到样式的时候我们说,样式是为了一系列元素共享一些属性而存在的,归根结底是为了复用代码和逻辑,而我们学习了触发器之后,发现我们可以用触发器写一些简单的逻辑到样式中,但是这种简单的逻辑有时候远远不够。 当我们要实现一堆元素支持在Cancas上面拖放,停靠,缩放等功能的时候,触发器就显得不是...

2020-03-16 22:55:02 132 0

原创 WPF高级教程(十七)触发器

使用触发器 触发器可以让我们的界面可以自动化完成一些简单的样式改变,如鼠标放上去变色等。 在样式中添加触发器就是往 Style.Triggers 集合里面添加触发器,只要是派生自 TriggerBase 的实例都是可以添加到集合中的,有下面几类 注意,我们可以为任何依赖项属性设置一个触发器,我们...

2020-03-16 22:13:47 70 0

原创 WPF高级教程(十六)样式
原力计划

概念 样式是可以应用于元素的一系列属性值的集合。 样式期望使用一份xaml代码来设置一系列元素的细节,比如内外边距,字体颜色等。 样式类似于CSS但是要比CSS更加强大,强大之处在于: 可以设置依赖项属性,使其可以控制控件行为 支持触发器 可以使用模板重新定义控件的内置外观 定义和设置样式 定...

2020-03-16 21:53:14 62 0

原创 WPF高级教程(十五)对象资源
原力计划

概念 对象资源是使用代码定义的一系列可以重用的对象,包括 画刷,样式,模板 等。WPF允许在代码中以及在xaml中各个位置定义对象资源。 资源集合 在FrameworkElement中定义了一个Resources属性,该属性使用Resource Dictionary类的实例填充,用于存储元素上的资...

2020-03-10 22:40:16 111 0

原创 WPF高级教程(十四)程序集资源

分类 WPF中的资源分为两类: 程序集资源 对象资源 其中,程序集资源指的是软件开发中用到的图片,声音,xml文件等资源,这些资源被添加到项目中之后会被嵌入到编译过得程序集中,会被编译成二进制数据。 而对象资源是一些.NET对象,希望能够一次定义多次使用,包括画刷,样式,模板等。 本文我们将着...

2020-03-10 22:34:23 126 0

原创 WPF高级教程(十三)命令
原力计划

概念 命令是事件更高层次的抽象。我们在WinForm的开发中,一个事件处理程序就是一个命令,而如果我们很多事件都对应着一套处理程序,我们会将处理程序提出去,处理程序就相当于一个命令,而在WPF中,原声提供了一套更高抽象的命令供我们使用,我们将要学的就是这个抽象出来的命令模型。 缺陷 WPF的命令模...

2020-03-05 08:53:54 172 0

原创 WPF高级教程(十二)元素绑定

绑定的限制 需要注意:绑定只能写在依赖项属性上。原因我们在上一文中讲过:源数据可以是任意数据,而目标必须是依赖项属性,所以绑定只能写在依赖项属性。 元素绑定的好处 如果我们想要实现一个滑动条,滑动的值显示再后面的TextBox中,我们的实现方法有下面两种: 之前的方法:在滑动条改变的事件中改变T...

2020-03-04 09:47:36 101 0

原创 WPF高级教程(十一)绑定说明

概念 绑定是一种关系,告诉目标对象使用原对象的一些信息设置其属性值。 分类 绑定关系分为很多种,但是本质上来说是 目标对象的属性 和 源对象的属性 进行绑定。 我们这里我们要求: 目标对象的属性必须是依赖项属性(这点很好理解,依赖项属性提供了让对象可以根据数据源改变的能力) 源对象属性可以是任何...

2020-02-26 16:56:30 58 0

原创 WPF高级教程(十)WPF程序的生命周期

介绍 就像每一个窗口对应一个Window类一样,每一个WPF的应用程序对应一个Application类 生命周期 创建 WPF程序中,Application类的创建是由App.xaml中完成的,具体的代码如下 <Application x:Class="TestProject.Ap...

2020-02-26 15:34:24 141 0

原创 WPF高级教程(九)控件
原力计划

定义 能够与用户交互的元素。继承自System.Windows.Control,基类提供以下能力: 设置对齐方式 设置Tab顺序 背景,前景,边框 文本内容尺寸和字体 注意在有时候,我们会在描述的时候说:这是界面上的一个控件,这是界面上的一个元素,那么,控件和元素有什么关系和区别呢?实际上,界...

2020-02-26 15:14:41 199 0

原创 WPF高级教程(八)专题:事件
原力计划

概述 除了路由事件,WPF中还有非路由事件,这个专题介绍一下WPF中所有的事件。 都有哪些事件 生命周期事件,元素的初始化,加载,卸载时发生 鼠标事件 键盘事件 手写笔事件 多点触控事件 下面就逐个介绍这些事件,大家可以先做一个简单的了解,当要深入使用这些事件的时候查询这篇文章即可 生命周期事...

2020-02-26 11:07:17 147 0

原创 WPF高级教程(七)路由事件

介绍 与依赖项属性一样,路由事件是WPF对于传统.NET事件的升级,使得事件拥有更强的传播能力。 定义,注册和包装 // 我们来看一个Click事件定义的例子 public abstract class ButtonBase : ContentControl { // 定义路由事件 ...

2020-02-26 10:42:29 164 0

原创 WPF高级教程(六)依赖项属性

概述 依赖项属性是属性的一种全新的实现。通过对原有属性的升级,依赖项能够实现数据绑定,动画或者WPF的其他进阶功能。通过对于依赖项属性的封装,使得依赖项属性的使用与普通属性一样,这样既兼容了老的使用方法,又把WPF的新特性带到了普通的WPF程序中。 功能 每个依赖项属性都支持 更改通知和动态值识...

2020-02-26 10:29:11 145 0

原创 WPF高级教程(五)专题:Grid

前言 Grid是WPF中最强大的布局容器,值得我们专门使用一个专题来了解Grid的使用。 使用 行列定义 <Grid ShowGridLines="True"> <Grid.ColumnDefinitions> <Colum...

2020-02-26 09:20:24 160 0

原创 WPF高级教程(四)布局

布局原则 空间的尺寸可以自适应。(要实现这样的效果需要不显式的指定控件尺寸,而是设置控件尺寸的最大最小值) 不设置绝对定位,使用相对定位(比如使用margin就是相对定位而非绝对坐标) 布局控件能为子控件合理分配尺寸 布局控件可以嵌套布局控件 类关系 布局控件都派生自Panel(类关系可以在之...

2020-02-26 09:11:43 148 0

原创 WPF高级教程(三)XAML

语言简介 XAML(Extensible Application Markup Language) 是用来写界面的 XAML是大小写敏感的 WPF是前后端分离的,前端用XAML实现,后端用C#写(注意能用XAML写的都能用C#实现,但是用XAML更加直观,我们在本篇教程里,一般只说明使用XAML...

2020-02-26 08:38:54 200 0

原创 编写优秀的单元测试(六)编写可读的测试

在上一篇文章我们讲了如何编写一个测试,这一章我们讨论一下如何让我们的测试变得可读性高一点。 什么代码不好读 网上有一个段子,说程序员最烦做的两件事情,一个是写文档,一个是写注释。程序员最烦别人不做的两件事情,一个是不写文档,一个是不写注释。这里提到了程序开发里面的一个最基本的事实: 读代码比写代码...

2020-02-22 16:25:52 104 0

原创 编写优秀的单元测试(五)编写测试

编码约定 当我们要写一个测试方法的时候,一个问题突然蹦入到我们的脑袋:写一个测试有什么固定的编码格式么?事实上,这个问题的标准很多,而我们这里推荐的是: 准备 - 执行 - 断言(Arrange - Act - Assert) 这个流程是:准备用于测试的对象 - 触发执行 - 对输出进行断言 编写...

2020-02-22 15:38:51 59 0

原创 WPF高级教程(二)体系结构

体系结构 控件,窗口,基础形状,样式等都在PresentationFramework和PresentationCore中 依赖项属性在WindowsBase中提供 milcore 托管图形,与Direct3D集成。渲染核心,不仅应用于WPF,也应用于系统界面的渲染 WindowsCodecs ...

2020-02-20 16:35:22 110 0

原创 WPF高级教程(一)概述

WPF是什么 WPF是基于Windows的用户界面框架,划重点:基于Windows,用户界面框架。 需要注意的是,WPF仅仅是有关于用户界面渲染的技术,而后台的开发,与系统的交互等都需要.NET Framework 的支持。 为什么写这一系列教程 在写这一系列教程之前,我去逛了逛论坛,对WPF一如...

2020-02-19 22:40:37 534 0

原创 编写优秀的单元测试(四)测试替身

简介 一说到测试替身,我们总会不由自主的想到mock,我们在上一章简单提了一下,测试替身是 桩(Stub) 伪造对象(fake)测试间谍(spy) 模拟对象(mock)的总称。而使用测试替身的根本目的是使用替身替换一个模块的真实协作者,以期隔离被测试对象。 我们说,引入测试替身的根本原因就是:将测...

2020-02-11 22:46:18 80 0

提示
确定要删除当前文章?
取消 删除