关于git stash ,原型链,TypeScript

117 阅读5分钟

Visual Studio Code上传gitee流程

首先新建一个空文件夹

空.png

创建一个空的html文件

login.png

拉进Visual Studio Code里点击克隆

点击克隆.png 克隆远程仓库地址

粘贴地址.png 克隆成功,在新的页面编写代码提交

编写.png

进入当前页面对修改完成的代码进行提交步骤

进入提交.png

点击加号进入暂存更改页面,进行代码更改前和更改后代码对比

查看已更改.png

点击提交 提交代码.png 进入备注页面

提交备注详情.png 保存成功后关闭页面

同步提交.png 点击同步更改上传至远程仓库

代码更新成功.png 远程仓库更新成功

git stash

git stash

能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。

在文件内打开git bash here

git.png 输入git add .将开发中的代码上传至暂缓区

git add.png

当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。

当前正在开发的项目

开发一半的项目.png 使用git stash 将正在开发的项目保存在堆栈中

堆.png 开发中的代码已被存储在堆栈中

已经存储.png

开始编写紧急修复的bug代码

修复已完成.png

修复已完成进行git 小黑框输入git add .将修复完成的代码进行提交

进行add指令.png 提交完成输入git stash pop 指令(git stash pop:将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。该命令将堆栈中最近保存的内容删除(栈是先进后出))

进行git stash pop指令.png 完成之后会有冲突将以下删除

删除.png

在git 小黑框 进行git add . git commit -m"" git push

完成.png 以上是git stash 全部过程

原型链

原型链通俗易懂的理解就是可以把它想象成一个链条,互相连接构成一整串链子! 而原型链中就是实例对象和原型对象之间的链接。每个函数都有一个prototype属性,这个prototype属性就是我们的原型对象,我们拿这个函数通过new构造函数创建出来的实例对象,这个实例对象自己会有一个指针(proto)指向他的构造函数的原型对象!这样构造函数和实例对象之间就通过( proto )连接在一起形成了一条链子。

原型链的特点

就近原则,当我们要使用一个值时,程序会优先查找离自己最近的,也就是本身有没有,如果自己没有,他就会沿着原型链向上查找,如果还没有找到,它还会沿着原型链继续向上查找,找到到达Object

引用类型,当我们使用或者修改原型链上的值时,其实使用的是同一个值!

JS中每个函数都存在原型对象属性prototype。并且所有函数的默认原型都是Object的实例。

每个继承父函数的实例对象都包含一个内部属性_proto_。该属性包含一个指针,指向父函数的prototype。若父函数的原型对象的_proto_属性为再上一层函数。在此过程中就形成了原型链。

原型链工作图

原型链图.png

TypeScript

什么是TypeScript
  • 简称 ts,是微软开发的一种静态的编程语言,它是 JavaScript 的超集。
  • js 有的 ts 都有
  • type+javascript

ts.png

TypeScript安装

node和浏览器不能直接运行TS,需要把TS转化为JS

  • 实现TypeScript向JavaScript转变
npm i typescript -g //全局安装 TypeScript
tsc -v        //查看ts版本
tsc hello.ts    //编译ts文件:生成js文件
node hello.js执行js代码
  • 简化运行TS步骤
npm i -g ts-node  //安装ts-node包
ts-node hello.ts  //将TS转化为JS,然后运行JS代码
tsconfig.json

运行tsc xxx.ts命令时候,会自动把ts文件编译成js文件

  {
  " compilerOptions":{
      "watch" :true,//只要代码改动,则自动刷新
      "removeComments " :true,//移除注释,
      }
}

ts 和 js 有什么区别

代码先编译后执行

  • TypeScript:静态类型语言,在编译期做类型检查。代码在编译(执行前)就发现错误。
  • JavaScript:动态型语言,在执行期做类型检查。代码真正执行的时候去发现错误

动态静态图.png

TS基本类型

原始类型

number,string,boolean,undefined,null,symbol

冒号后面的内容:类型注释

let username : string ="张老师";
let age: number = 21;
let isLoading: boolean = true;
let a: nul1 = null;
let b: undefined = undefined;
let c: symbol = symbol( );
数组类型
//数组类型
 let arr: string[] = ["憨憨","笨笨","蛋蛋"]
 
//联合类型
 let arr1:(string | number)[]=["秀哇",100]

类型别名

相同的类型反复使用

type myType = {name:string,age:number}

let obj:myType = {name:'老六',age:20}
let obj1:myType = {name:'小七',age:18}
let obj2:myType = {name:'老八',age:26}
let obj3:myType = {name:'小九',age:17}
函数类型

函数涉及的类型实际上指的是:函数参数返回值的类型

// 普通函数
function 函数名(形参1: 类型=默认值, 形参2:类型=默认值,...): 返回值类型 { }
// 声明式实际写法:
function add(num1: number, num2: number): number {
  return num1 + num2
}

// 箭头函数
const 函数名(形参1: 类型=默认值, 形参2:类型=默认值, ...):返回值类型 => { }
const add2 = (a: number =100, b: number = 100): number =>{
   return a + b
 }
 // 注意: 箭头函数的返回值类型要写在参数小括号的后面
add(1,'1') // 报错 

对象类型
// 创建类型别名
type Person = {
  name: string,
  age: number
  sayHi(): void
}

// 使用类型别名作为对象的类型:
let person: Person = {
  name: '憨憨',
  age: 18
  sayHi() {}
}
元组

元组是另一种类型的数组,是明确元素数量和类型的数组

let arr3:[number,string] = [1000,'哈哈哈']