重学js系列
lyx9904
这个作者很懒,什么都没留下…
展开
-
Promise实现并发
class Schedule{ constructor(maxtask){ this.list = []; this.maxtask = maxtask; this.worknum = 0; }; add(...task){ this.list.push(...task) }; start(){ for(let i = 0;i<this.maxtask;i++){.原创 2021-06-20 16:10:25 · 172 阅读 · 0 评论 -
ES6新增的reduce究竟有多强大?
端午节三天的假期,因为没有带电脑回家所以无聊的时候就只能通过手机翻翻文档,于是,意外的发现,reduce真的太强大了。在此之前,我一直只是简简单单的把reduce用于求和,但其实他还有很多有意思的用法。例如,实现Promise的顺序执行,例如有多个Ajax请求,后一个请求依赖于前一个请求的结果(现在也可以用await async实现),这时候就必须保证只有前一个请求完成才能进行下一个请求。代码如下:在这里插入代码片...原创 2021-06-15 16:40:51 · 185 阅读 · 0 评论 -
typeof和instanceof判断数据类型的原理。
console.log(typeof null);输出什么?Obejct。这个问题很多人都知道,但是,为什么输出的是Object?原因就在于js在存储数据的时候,会用低位数(前三位)去存储数据类型。其中:000:对象010:浮点数100:字符串110:布尔1:整数但是对于null,undefine来说,null所有的机器码均为000与对象的前三位一致,所以就会出现误判的情况。instanceo判断数据类型得原理就是通过原型链的查询。(附代码)function myinstance原创 2021-06-09 10:47:07 · 493 阅读 · 0 评论 -
利用JSONP跨域请求腾讯天气(内附代码)
除了CORS实现跨域,也可以利用JSONP,不过JSONP只能实现get请求,并且受URL地址长度的限制。首先打开腾讯天气的网站,打开network,找到类型为script报文(双击查看哪个是请求天气的,记得下载jsonp插件),分析请求参数https://wis.qq.com/weather/common?source=pc&weather_type=observe%7Cforecast_1h%7Cforecast_24h%7Cindex%7Calarm%7Climit%7Ctips%7Cri原创 2021-05-31 21:10:33 · 783 阅读 · 0 评论 -
简单封装call,bind,apply
主要还是看对this的指向熟不熟悉就简单说一下call吧(可能有点乱或者理解错误,还请见谅):传入的第一个参数是借用该方法的对象,比如obj1.say.call(obj2)就是obj2在借用obj1.say方法,如果要自己封装的话,应该在我们封装的方法里面获得obj1.say方法并进行添加到对象obj2里调用,这里的话就是我们在原型上添加的方法里面的this let obj1 = { name:'zhansan', age:12,原创 2021-05-28 16:43:45 · 171 阅读 · 0 评论 -
用CORS模拟跨域
问起跨域,很多人都可以很轻松的说出JSONP(同源政策只限制XHR,而对于img,script的src没有限制,但是它只能通过get请求),CORS(服务器端设置)等等但是,让其不看资料手写一遍估计够呛的。比如我,今天尝试用CORS实现跨域,然而发现自己nodejs的早已忘完了。。发起跨域请求的服务器代码:const express = require("express");const app = express();const path = require("path")app.use(e原创 2021-05-26 20:12:16 · 376 阅读 · 0 评论 -
在for循环里用var实现let的效果
用for循环连续按顺序打印1,2,3,4,5(间隔1秒);于是噼里啪啦写出以下代码:for(var i =1;i<=5;i++){ setTimeout(() => { console.log(i); }, i*1000);}于是,一运行,不到啊,怎么都是打印6(涉及到事件循环)。然后你仔细看了以下代码,哦,把Var改成let不就可以了。运行了一下,确实可以。这时候面试官又来了一个问题,请换种方式实现。。What??利用闭包for(var i原创 2021-05-26 11:12:06 · 472 阅读 · 0 评论 -
事件俘获,冒泡,委托
JS的事件流如下:(图忘记在哪里偷的。。忘记了)类似于,往水里丢下去一块大石头,在沉下去的过程中石头是可以被俘获的(事件俘获),沉到底之后会往上冒泡泡(冒泡,通常用于事件委托,减少对DOM的操作)那么事件俘获和事件冒泡有什么用呢?事件俘获:我确实想不到有啥用。。一开始我以为可以进行拦截。。。事件冒泡的话就可以减少对DOM的操作,减少重排。 <style> ul>li{ width: 50px;原创 2021-05-25 22:00:09 · 50 阅读 · 0 评论 -
Promise的最简单封装(极其简陋版)
建议写的时候参照new Promise的过程去写function mypromise(fn){ const that = this; that.status = 'pedding'; that.value = ''; let falg =false //当没有调用resolve,reject函数时抛出错误 function resolve(val){ if( that.status == 'pedding'){原创 2021-05-24 21:06:44 · 90 阅读 · 0 评论 -
async await使用的一些注意事项
async其实是Generator函数的一个语法糖,它具有更好的语义性,并且返回的是一个promise对象(Generator返回的是一个可遍历的对象)。 // async function asyn1(){ // return 'hello wrod' // } // asyn1().then(res => { // console.log(res); // })async函数的返回值会被当成.th原创 2021-05-21 16:34:16 · 409 阅读 · 0 评论 -
js中的几种继承方式
继承方式:构造函数继承,原型继承,组合继承,寄生式继承,寄生式组合继承注:本篇博客可能存在理解错误,仅供参考,新手小菜鸡在说继承之前,先来说说原型链吧。说到原型链,你能想到什么?构造函数?原型对象?实例?他们之间的关系又是什么呢?构造函数可以通过new创建出一个实例对象(可见上篇博客new做了什么),实例对象又能通过__proto__访问原型对象,而原型对象又可以通过constructor访问其构造函数,构造函数可以通过prototype访问原型对象。是不是很绕,对的,确实很绕。那接下来看原创 2021-05-20 23:47:24 · 52 阅读 · 0 评论 -
javaSript中的new关键字做了什么?
//根据以下代码可以总结出,new关键字做了啥 // new有改变this指向 // 创建一个空对象 // 将创造出来的空对象的原型对象指向构造函数的原型对象(不懂的可以找找 //原型链还有继承的资料,或者等我下篇推文) function Person(name,age){ this.name = name this.age = age } ...原创 2021-05-19 16:13:57 · 66 阅读 · 0 评论 -
深浅拷贝的实现
js的6种基本数据类型:string,number,undefined,null,boolean,symbol(一直不清楚这个有啥用,翻了资料也没想明白,可能段为不够吧毕竟菜鸡本鸡。不重复唯一标识??)引用类型L:Object type :Object 、Array 、Function 、Data等基本数据类型是按值存放在栈中引用类型是把其地址存放在栈中,每次访问都先通过栈取得地址再从堆中取得真正的数据,所以也叫引用,类似C语言的指针?```html```javascript let obj原创 2021-05-18 23:24:32 · 39 阅读 · 0 评论