From 3576bfe5a06f325626ae2f388daad1035fcd7b49 Mon Sep 17 00:00:00 2001 From: Levi <5457109+linkpingit@user.noreply.gitee.com> Date: Mon, 17 May 2021 11:29:18 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B9=9D=E5=91=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...46\210\252\345\233\276_20210517112757.png" | Bin 0 -> 20253 bytes ...54\344\270\200\350\212\202\350\257\276.md" | 248 ++++++++++++++++++ ...54\344\270\211\350\212\202\350\257\276.md" | 177 +++++++++++++ ...54\344\272\214\350\212\202\350\257\276.md" | 196 ++++++++++++++ 4 files changed, 621 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\345\276\256\344\277\241\346\210\252\345\233\276_20210517112757.png" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\200\350\212\202\350\257\276.md" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\211\350\212\202\350\257\276.md" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\345\276\256\344\277\241\346\210\252\345\233\276_20210517112757.png" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\345\276\256\344\277\241\346\210\252\345\233\276_20210517112757.png" new file mode 100644 index 0000000000000000000000000000000000000000..613b5532569eea5415d1b4ce5059cda7acbd3b28 GIT binary patch literal 20253 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 literal 0 HcmV?d00001 diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\200\350\212\202\350\257\276.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\200\350\212\202\350\257\276.md" new file mode 100644 index 00000000..019f6180 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\200\350\212\202\350\257\276.md" @@ -0,0 +1,248 @@ +# 第十九周-第一节课 + +## 循环语句 + +- `for循环` + + ``` + // 类似python中的for i in range(20) + + for(let i=0; i<20; i++){ + console.log(i) + } + ``` + +- `while循环` + + ``` + const MAX_TIMES = 20; + let cur = 0 + while (cur < MAX_TIMES){ + cur++; + console.log(cur) + } + ``` + +- `do while` + + ``` + do { + cur ++; + console.log(cur); + }while (cur < MAX_TIMES) + ``` + + - 和`while循环`有什么区别? + + `do while`一定先执行一遍代码块的表达式; + +- `for in` + + > 遍历对象的属性 + + ``` + let myObj = {a: 1, b:2, c:3, d:4} + for (let e in myObj){ + console.log(e, myObj[e]); + } + ``` + +- `for of` + + > 遍历可迭代对象的元素 + + ``` + let myArray = [1, 2, 3, 4, 5] + for (let e of myArray){ + console.log(e); + } + ``` + + - 常见的可迭代对象有哪些? + + - Array + + - Set + + - Map + + - String + + - arguments + + ``` + function foo(a, b){ + console.log(arguments); + } + + foo(1, 2) + ``` + +- `forEach` + + ``` + let myArray = [1, 2, 3, 4, 5] + myArray.forEach(function (e){ + console.log(e * e); + }) + ``` + +## 条件语句 + +- 一个简单的判断语句 + + ``` + for(let i=0; i<100; i++){ + if (i%2===0){ + console.log("偶数", i) + }else if(i < 0){ + console.log("负数不判断") + }else{ + console.log("奇数", i) + } + } + ``` + +- 逻辑运算符 + + - `==` + + 对比操作数是否相同, 操作数会尝试进行类型转换后的比较, **不推荐做为比较符号.** + + ``` + '1' == 1 + > true + + false == 0 + > true + ``` + + - `===` + + 严格等于 + + ``` + '1' === 1 + > false + + false === 0 + > false + ``` + + - `!` + + 逻辑取反 + + ``` + for(let i=0; i<100; i++){ + // 注意运算优先级的问题, 不能写成!i%2 + if (!(i%2)){ + console.log("偶数", i) + }else if(i < 0){ + console.log("负数不判断") + }else{ + console.log("奇数", i) + } + } + ``` + + - `&&` 和`||` + + - `&&`表示AND + - `||`表示OR + +## 选择语句 + +- `switch case` + + ``` + function foo(arg){ + switch (arg){ + case 'a': + console.log(arg, 1); + break; + case 'b': + console.log(arg, 2); + break; + case 'c': + console.log(arg, 3); + break; + default: + console.log('default') + } + } + + foo('e') + ``` + +## 异常处理 + +``` +try{ + 表达式 +}catch (e){ + 表达式 +}finally{ + 表达式 +} +``` + +- 一个基本的异常捕获 + + ``` + function foo(){ + try{ + throw TypeError('test'); + }catch (e){ + console.log('Error', e); + }finally{ + console.log('Done!') + } + } + + foo() + ``` + +- 处理具体的异常 + + > 处理具体的异常, 只能通过if条件语句来进行类型判断 + + ``` + function foo(){ + try{ + throw TypeError('test'); + }catch (e){ + if (e instanceof TypeError){ + console.log("TypeError") + }else{ + console.log('Error', e); + } + }finally{ + console.log('Done!') + } + } + + foo() + ``` + +- 抛出异常 + + `throw`可以抛出任意对象, 让`catch`去捕获 + + ``` + function foo(){ + try{ + throw {'a':1}; + }catch (e){ + if (e instanceof TypeError){ + console.log("TypeError") + }else{ + console.log('Error', e); + } + }finally{ + console.log('Done!') + } + } + + foo() + ``` \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\211\350\212\202\350\257\276.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\211\350\212\202\350\257\276.md" new file mode 100644 index 00000000..9fa5aa83 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\270\211\350\212\202\350\257\276.md" @@ -0,0 +1,177 @@ +- # 第十九周-第三节课 + + ## 异步JS + + JS引擎只是浏览器中的一个线程, 所以在JS当中没有线程和进程的概念.JS的高性能是通过一个基于**事件循环**的异步并发模型来完成. + + - 事件循环 + + 在页面环境中, 我们移动鼠标, 点击页面元素或者执行一段JS, 都可以认为当前是一个消息. 当前的消息会被丢进一个无限循环的消息队列当中, 每一个消息都关联着用来处理这个消息的**回调函数** + + ``` + document.addEventListener("click", function(e){console.log(e)}) + ``` + + - 事件循环的伪代码 + + ``` + while(queue.waitForMessage()){ + queue.processNextMessage(); + } + ``` + + - 消息的执行 + + - JS在执行同步消息任务时, 会执行至完成. + - JS在执行异步消息任务时, 遇到异步操作, 会将该消息丢回消息队列, 等待下一次调度执行. + + ## callbacks(异步回调) + + 最常见于浏览器的监听事件, 本质就是将回调函数做为参数传递给后台执行的其他函数, 其他函数在执行完毕后自动调用回调函数 + + ``` + document.addEventListener("click", function(e){console.log(e)}) + ``` + + - 回调地狱 + + ``` + // 银行转账的伪代码 + transferAccount(cash, + dealCash(cash, function(cash_status){ + authAccount(cash_status, function(order){ + transferStart(order, function(status){ + sendSMS(status) + }, transferExceptionCallback) + }, authExceptionCallback) + }, cashExceptionCallback) + ) + ``` + + ## Promise + + `Promise`是一个对象, 它代表了一个异步操作的最终**完成**或者**失败**的结果. + + ![img](https://i.im5i.com/2021/03/14/hiRQ2.png) + + - 声明一个简单的`promise`对象 + + ``` + let promiseOjb = new Promise((resolve, reject) => { + setTimeout(() => { + resolve("success"); + reject("failed"); + }, 3*1000) + }).then(result => {console.log("result => ", result)}) + + console.log(promiseOjb) + ``` + + - `promise`的状态 + + - pending + + 初始状态, 表示未接收到结果 + + - fullfill + + 已兑现, 表示操作成功完成 + + - reject + + 已拒绝, 表示操作失败 + + - 在使用`promise`时, 需要注意以下约定 + + - 回调函数时在当前事件循环结束后自动调用的; + - 通过`then`添加的回调函数不管异步操作是否成功都会执行; + - 通过调用多次`then`可以添加多个回调函数, 他们按插入顺序依次执行, 这个方式就叫做**链式调用**; + + - 在`promise`中处理异常 + + - 声明一个简单的xhr请求 + + ``` + function xhrRequest(url){ + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onload = function(){resolve(xhr.responseText)}; + xhr.onerror = () => reject(xhr.status); + xhr.send() + }).then(result=>{console.log("SUCCESS", result)}) + .catch(error=>{console.log("FAILURE", error)}) + } + + xhrRequest("http://www.baidu.com") + xhrRequest("https://www.baidu.com") + xhrRequest("https://www.baidu.com/asdfasdf/") + ``` + + - 当前环境下, 客户端请求到达了服务端, 服务端也正常地返回了结果. 那么不管状态码是200还是404, 都算是一次成功的请求, 所以结果由`then`回调进行处理, 而不是`catch`. 如果有需要可以自己通过状态码判断后执行不同的流程. + + - 链式调用 + + ``` + function xhrRequest(url){ + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onload = function(){resolve(xhr.responseText)}; + xhr.onerror = () => reject(xhr.status); + xhr.send() + }).then(result=>{console.log("SUCCESS", result); return result}) + .then(result=>{console.log("SUCCES 2", result)}) + .catch(error=>{console.log("FAILURE", error)}) + } + ``` + + - 不管当前链式调用有多长, 异常都会进到`catch`回调函数当中. `catch`也可以进行链式调用, 但是一般一个函数只有一个`catch`回调函数. + + ## async/await + + ``` + async`本质就是将函数转换为`promise + ``` + + - 通过`async`和`await`等待完成结果 + + ``` + function xhrRequest(url){ + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onload = function(){resolve(xhr.responseText)}; + xhr.onerror = () => reject(xhr.status); + xhr.send() + }) + } + + async function requestBaidu(url){ + let result = await xhrRequest(url); + console.log("DONE!", result) + } + ``` + + - 异常处理 + + ``` + function xhrRequest(url){ + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onload = function(){resolve(xhr.responseText)}; + xhr.onerror = () => reject(xhr.status); + xhr.send() + }) + } + + async function requestBaidu(url){ + try{ + let result = await xhrRequest(url); + console.log("DONE!", result) + }catch (e){ + console.log("FAILURE", e) + } + } + ``` \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" new file mode 100644 index 00000000..dfafb349 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/\347\254\254\345\215\201\344\271\235\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" @@ -0,0 +1,196 @@ +# 第十九周-第二节课 + +## 对象和类 + +> js当中其实没有明确的类的概念, js当中的类只是创建对象的模板. 它的本质还是一个特殊的函数 +> +> `class`关键字只是一层封装了原型链的语法糖, 但是方便我们理解. + +- 声明类 + + ``` + class Rectangle { + constructor(height, width) { + this.name = 'ractangle'; + this.height = height; + this.width = width; + } + } + ``` + +- 创建对象/实例 + + ``` + let rectangle = new Rectangle(2, 5); + console.log(rectangle) + ``` + +- 类方法 + + - 构造方法 + + `constructor`是一种用来创建和初始化`class`创建的对象; + + - 实例方法 + + ``` + class Rectangle { + constructor(height, width) { + this.name = 'ractangle'; + this.height = height; + this.width = width; + } + + getArea(){ + return this.height * this.width; + } + } + ``` + + - 静态方法 + + ``` + static staticMethod(){ + console.log("calling static method") + } + ``` + + - `getter`和`setter` + + ``` + get area(){ + return this.getArea() + } + + set area(value){ + this._value = value + } + ``` + +- 类继承 + + ``` + class Square extends Rectangle { + constructor(a) { + super(a, a); + this.name = 'square' + } + } + + let suqare = new Square(10) + console.log(suqare.area) + ``` + +- 私有方法和属性 + + 通过`#`来声明一个私有方法或者属性, 只允许类内部调用 + + ``` + class Square extends Rectangle { + // 私有属性需要事先进行声明 + #new_name + constructor(a) { + super(a, a); + this.#new_name = 'square' + } + + get new_name(){ + return this.#getName() + } + + #getName(){ + return this.#new_name + } + } + ``` + +## 构造函数和this + +> 在JS中通过构造函数来创建对象的场景更多, 而不是通过class + +- 声明一个构造函数 + + ``` + function Rectangle(height, width){ + this.name = 'rectangle'; + this.width = width; + this.height = height; + + this.getArea = function (){ + return this.height * this.width + } + } + ``` + +- 创建对象/实例 + + ``` + let rectangle = new Rectangle(10, 2) + console.log(rectangle.getArea()) + ``` + +- 通过`call`方法继承 + + 第一个参数是要绑定的对象, 其他参数代表调用**函数**的参数. + + > `call`方法将`Rectangle`下的属性和方法绑定到`this`上去 + > + > 这里的this指代的就是实例化的square对象 + + ``` + function Square(a){ + Rectangle.call(this, a, a); + this.name = 'square' + } + ``` + + - apply + + 和`call`方法几乎没有区别, 只是传入的参数的方式不同 + + ``` + function Square(a){ + Rectangle.apply(this, [a, a]); + this.name = 'square' + } + ``` + +- this + + 不能简单地认为`this`指向的就是实例对象. + + 可以简单地认为谁调用该函数, `this`就指向谁. + +## 原型链式继承 + +在传统面向对象编程中, 我们继承的实现方式都是在创建实例时, 将类中定义的属性和方法都复制到实例中去. + +但是JS中继承是在对象/实例和它的构造器之间创立一个链接, 这个链接就是`__proto__` + +- 原型链 + + 在`js`中每个构造函数拥有一个原型对象`prototype`, 对象从原型继承方法和属性. 而当前对象继承的原型对象可能也有原型, 这样就形成了一条原型链 + + ``` + square.__proto__.__proto__.__proto__ + ``` + + - `__proto__`和`prototype`的区别? + + `__proto__`是每个对象/实例都有的属性, 而`prototype`只是构造函数的属性. + +- 原型链式继承 + + 当前对象/实例square找不到getArea方法时, 会继续在原型链中寻找. + + ``` + function Square(a){ + this.height = a; + this.width = a; + this.name = 'square' + } + + Square.prototype = new Rectangle() + let square = new Square(10) + console.log(square.getArea()) + ``` \ No newline at end of file -- Gitee From 378e37d3a356979c7a3788fdd88576befb7a0f52 Mon Sep 17 00:00:00 2001 From: Levi <5457109+linkpingit@user.noreply.gitee.com> Date: Mon, 17 May 2021 11:30:43 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=AC=E4=B9=9D=E5=91=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test.js" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/test.js" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/test.js" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/test.js" new file mode 100644 index 00000000..780bd3a5 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\271\235\345\221\250/test.js" @@ -0,0 +1,48 @@ +let promiseObj = new Promise(function (resolve, reject){ + setTimeout(function () { + resolve("success") + reject("failed") + }, 5*1000) +}).then(result => {console.log(result)}) + +console.log(promiseObj) + +function xhrRequest(url){ + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onload = function(){resolve(xhr.responseText)}; + xhr.onerror = () => reject(xhr.status); + xhr.send() + }).then(result=>{console.log("SUCCESS", result); return result}) + .then(result=>{console.log("SUCCES 2", result)}) + .catch(error=>{console.log("FAILURE", error)}) +} + +xhrRequest("http://www.baidu.com") +xhrRequest("https://www.baidu.com") +xhrRequest("https://www.baidu.com/asdfasdf/") + + +function Rectangle(height, width){ + this.name = 'rectangle'; + this.width = width; + this.height = height; + + this.getArea = function (){ + return this.height * this.width + } +} + + +function Square(a){ + this.height = a; + this.width = a; + this.name = 'square' +} + +Square.prototype = new Rectangle() + +let square = new Square(10) + +console.log(square.__proto__) \ No newline at end of file -- Gitee