自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 TS装饰器介绍

装饰器模式简介装饰器模式是一种重要的设计模式,它能够以对客户透明的方式动态地给一个对象附加上更多的责任,为明晰它的概念,请看下面的例子:在一个末日生存游戏里,你有一个安全屋和一张床,每次睡觉都可以恢复一定的精力,但是初始的床什么都没有,每天睡在木板上只能恢复20点精力,某天你出外搜寻了材料并制作了一个床垫,将床垫放在床上,每次睡觉可以额外恢复20点精力,之后你又找到了被絮和三件套,甚至还给床进行改装增加了按摩功能,每次睡觉可以额外恢复的精力越来越多了…在这个例子中,对于使用床的人而言,“睡觉”这个

2021-09-18 15:37:00 3789 1

原创 Observable 的由来

Observable 是 RxJS 的核心概念,是一切响应式操作的基础类,下面是 RxJS 文档中给出的基本示例:import { Observable } from 'rxjs'; const observable = new Observable(subscriber => { subscriber.next(1); subscriber.next(2); subscriber.next(3); setTimeout(() => { subscriber.nex

2021-09-12 11:19:32 209

原创 Referer头和Web安全

使用Referer防止CSRF攻击 统计用户特征(推荐还是用埋点) 第三方盗取(跨域referer泄露)Referrer-PolicyGET /a/b HTTP/1.1Host: www.baidu.comConnection: keep-alivePragma: no-cacheCache-Control: no-cacheUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTM.

2021-09-09 21:18:09 1106

原创 vue3响应式原理浅析

Vue3是新一代的Vue响应式框架,其中一项重大的改变是重写了响应式模块,使用了新版浏览器提供的Proxy代替Object.defineProperty实现响应式,本文对新版本响应式原理进行了一些分析。简单创建一个vue3项目使用vite工具即可快速生成一个vue3项目,并且自带热更新功能:$ npm init vite-app <project-name>$ cd <project-name>$ npm install$ npm run dev我们可以先使用Co.

2021-08-16 14:30:08 373

原创 docker基础

基本命令概念image 镜像, 可用于生成容器,或者作为其他镜像的源container 容器,镜像的实例run启动一个容器运行镜像docker run -d -p 80:80 docker/someservice 运行最后名字的服务docker run -dp 3001:3001 -w /usr/local/app blog-server npm run dev 运行node程序基本选项:-d 后台运行(detached)-p 端口号映射-w 指定工作目录-i 交互方式运行(非

2021-08-16 10:13:58 159

原创 利用verdaccio搭建npm源入门

我们在开发中一般会把npm源换成淘宝源(https://registry.npm.taobao.org)来加速下载软件包,有些公司也有做自己内部搭建的npm源,可以将一些内部包发布在其中,调用起来更加方便,那么可不可以做一款自己的npm源,将我们自己鼓捣的一些奇怪软件包发进去呢?vadaccio是一款零配置的个人私有npm源,让搭建一个私有源变得非常简便!使用它的docker镜像来安装更加便捷,我们需要准备的只有一台服务器,下面是搭建源的步骤。启动vadaccio服务首先拉取镜像:docker pul

2021-08-15 22:11:23 517

原创 typescript声明文件写法

目前typescript已经非常流行了,我们经常在开发中用到类型、接口、枚举等功能,但一般业务开发中很少需要用到声明文件,只有在诸如扩展一个全局变量、声明一些全局类型的情况下会用到。但如果要写一个node包,那么声明文件就是必不可少的,typescript的声明文件有多种形式,而且不同形式的用法差别很大,本文主要汇总了声明文件的书写方法。声明文件的定义声明文件一般包含一些变量和函数的类型定义,如C、C++的.h头文件。在typescript中以.d.ts为扩展名的文件是声明文件。声明文件的查找规则.

2021-08-15 21:39:24 892

原创 CORS预检

CORS是一种常见的跨域机制,一般由服务端提供一个Access-Control-Allow-Origin头来解决问题,但是这仅对一些“简单请求”有效。那么何谓“简单请求”呢?根据MDN的介绍,一个请求如果同时满足:请求方法为GET HEAD POST中任意一种请求头仅包含浏览器(代理)添加的头字段(User-Agent, Connection)、描述资源的头字段(Accept, Accept...

2020-02-13 23:59:44 392

原创 Vue实现组件化的基本思路

Vue.js(以下简称Vue)是时下流行的前端开发库,一般搭配其插件Vue-Router,Vuex一起使用,行业中称为Vue全家桶。Vue使用了MVVM的理念,将表现层(DOM)和数据层进行了分离,其基本思想是数据和DOM的一体化,操作数据即可变更DOM,表单交互亦可通过v-model指令改变数据,将前端开发者从DOM、数据两手抓的泥潭中解放出来。但是,使用这种方法的代价还是明显的,那就是Vu...

2020-01-15 00:22:30 454

原创 前端深拷贝的简易实现

JS这门语言没有提供深拷贝的内建方法,诸如slice, concat, Object.assign这些方法其实都是对象的浅拷贝,修改深层次引用时就会变更原始数据,这在一些必须使用深拷贝的场景是无法接受的,所以如何实现一个有用又靠谱的深拷贝方法变得至关重要。如果不想搞得太复杂,可以直接使用这个懒汉大法:JSON.parse(JSON.stringify(target)),它的思路很简单,先序列化再...

2020-01-12 10:43:28 398

原创 使用git钩子防止合并分支

git是一款好用的版本管理工具,我们一般通过git init初始化一个git仓库,然后git会在当前目录为我们生成一个.git/目录,用来管理我们的版本文件信息。在这个目录中有一个二级目录.git/hooks/,它里面存放了一些git执行的钩子脚本,在git运行的不同时期,执行不同的钩子函数,我们可以通过编写一些钩子脚本控制它的工作流程。比如在代码提交时进行邮件通知,或者代码格式检验等。本文介...

2019-12-07 14:01:42 1449

原创 Vue获取DOM的几种方法

虽然Vue实现了MVVM模型,将数据和表现进行了分离,我们只需要更新数据就能使DOM同步更新,但是某些情况下,还是需要获取DOM元素进行操作(比如引入的某个库要求传入一个根dom元素作为根节点,或者写一些自定义指令),本文主要介绍几种在Vue中获取DOM元素的方法。使用DOM API直接找元素<script> ... mounted () { let elm = this....

2019-10-07 13:14:10 2965

原创 Js正则表达式——引用匹配组

Javascript的正则支持向后引用,即在正则式中使用已经匹配到的子串。什么意思呢?先看个问题:我要一个正则,匹配2080-02-26和2080.02.26这两个时间格式,怎么写呢?/^\d+[.\-]\d+[.\-]\d+$/显然是不行的,因为它也能匹配2080-02.26,2080.02-26,直接扑街。这时我们就可以使用正则提供的引用功能。它的写法是\n,看起来怎么跟个换行符一样?其实n...

2019-08-20 14:45:53 1245

原创 Js正则表达式——匹配一个空位置

以前说到正则表达式,我以为就是匹配一些字符,然后拿到匹配的元素一顿操作,或者使用类似String.replace这种方法对匹配到的元素进行替换。但是最近发现,它也能匹配空字符,并做一些事情。考虑这个问题:我要把123456789这个数字从个位数起每隔三位加一个,——即把它变成123,456,789这种格式,要怎么做?这是一个很实用的问题,与钱相关的东西或多或少都会被要求处理格式。我们可以用Ja...

2019-08-18 17:43:58 1047

原创 Javascript函数记忆及应用

记忆化(memoization)是一种构建函数的处理过程,让函数能够记住计算的结果。简而言之,就是把第一次计算的结果按照传参保存到某个地方,当以后以相同参数调用时不需重复执行,直接返回上次的结果,从而避免重复而繁琐的计算,提高了函数的执行性能。那么,到底把这些值保存到哪里呢?根据Javascript语法,函数是第一类对象,我们可以自由地给函数定义一些属性,于是很自然地可以想到,我们可以给函数定义...

2019-06-30 11:28:10 167

原创 Object.defineProperty函数的configurable配置

以前一直觉得Object.defineProperty是个非常普通的点,无非就是配置一下属性描述符,包括对象是否可枚举(enumerable)、可写(writable)之类的,然后就是定义一个get, set这种。而在实际写代码的过程中,这个东西用到的频率不大,更多的是出现在一些库的源码里头。最近注意到一个以前漏掉的点,就是属性是否可配置,configurable这个属性。以下是MDN对conf...

2019-06-16 17:42:00 8908 4

原创 抓包工具Filddler和Willow的安装

抓包工具Filddler和Willow的安装

2019-04-10 15:36:36 901

原创 前端本地存储localStorage及应用

localStorage

2019-02-17 15:29:37 2362

mingw-w64.7z

官网下载的mingw 64位版本,解压后把路径加入系统path即可使用,gcc版本8.1.0

2019-07-02

Fiddler4+Willow

前端调试工具Fiddler4+Willow+证书生成器,参照https://blog.csdn.net/getTheCheeseOfGod/article/details/89181780设置https支持。

2019-04-10

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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