<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[YiChan414的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/YeChan414</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; YeChan414]]></copyright><item><title><![CDATA[JS继承方法]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/128303924</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/128303924</guid><author>YeChan414</author><pubDate>Tue, 13 Dec 2022 17:03:17 +0800</pubDate><description><![CDATA[1.原型链继承

2.构造函数继承

3.组合继承

4.寄生组合继承

5.类继承]]></description><category></category></item><item><title><![CDATA[使用npm run serve打包vue项目出现白屏]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/125167371</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/125167371</guid><author>YeChan414</author><pubDate>Tue, 07 Jun 2022 16:05:49 +0800</pubDate><description><![CDATA[出现白屏第一种可能就是找不到资源解决办法：在vue.config.js文件中写入：


即可第二个就是可能用了路由，那么就要把路由的mode从history变成hash]]></description><category></category></item><item><title><![CDATA[配置代理服务器]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/125088770</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/125088770</guid><author>YeChan414</author><pubDate>Wed, 01 Jun 2022 19:11:46 +0800</pubDate><description><![CDATA[在vue.config.js文件夹中写入如下代码：


这样所有出现/api的地方都会变成网址在src文件夹下建立一个setupProxy.js文件，并写入以下代码：


这样所有出现/api的地方都会变成网址]]></description><category></category></item><item><title><![CDATA[面试被问（亲身经历）]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/125085311</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/125085311</guid><author>YeChan414</author><pubDate>Wed, 01 Jun 2022 16:39:25 +0800</pubDate><description><![CDATA[面试被问到的]]></description><category></category></item><item><title><![CDATA[块级元素和行内元素]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/125070917</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/125070917</guid><author>YeChan414</author><pubDate>Tue, 31 May 2022 18:13:46 +0800</pubDate><description><![CDATA[块级元素

div、p、hr、h1-h6、ul、ol、li、table、form



行内元素

span、a、br、img、input、select、textarea
]]></description><category></category></item><item><title><![CDATA[新特性相关]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/125070790</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/125070790</guid><author>YeChan414</author><pubDate>Tue, 31 May 2022 18:09:33 +0800</pubDate><description><![CDATA[H5新增

更好的语义化标签（header、footer...)

增强型表单（input的type值更多）

音频和视频

canvas画布

拖拽api

localstorage和sessionstorage

web worker和web socket

地理定位



Css3新增

选择器

盒子阴影

圆角边框

渐变

转换、过渡、动画

flex



ES6新增

let和const

箭头函数

解构赋值

模板字符串

扩展运算符

symbol类型

promise

async/]]></description><category></category></item><item><title><![CDATA[前端安全问题]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124948927</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124948927</guid><author>YeChan414</author><pubDate>Tue, 24 May 2022 16:25:53 +0800</pubDate><description><![CDATA[目录



XSS攻击

简介

攻击类型

防范措施

CSRF攻击

简介

攻击类型

防范措施



XSS攻击

简介

xss，全称Cross Site Scripting，翻译为跨站脚本攻击

它的攻击原理是利用开发时候的漏洞，向页面注入一些恶意代码，从而达到攻击目的

攻击类型

xss的攻击类型可分为持久型和非持久型

持久型指的是存储型xss，恶意代码被保存到目标网站的服务器中，这种攻击具有较强的稳定性和持久性
	非持久型分为反射型xss和DOM型xss，反射型xss通过引诱用户点击一个]]></description><category></category></item><item><title><![CDATA[webpack.config.js]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124210201</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124210201</guid><author>YeChan414</author><pubDate>Sat, 16 Apr 2022 11:00:06 +0800</pubDate><description><![CDATA[const {resolve} =require('path')

module.exports = {

    //入口文件
    entry:'./index.js',  //根据自己的文件替换
    //输出
    output:{
        //输出文件名
        filename:'built.js',
        //输出路径
        path:resolve(__dirname,'build')  //__dirname是nodejs的变量，代表的是当前文件存]]></description><category></category></item><item><title><![CDATA[手写call函数和apply函数]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124132242</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124132242</guid><author>YeChan414</author><pubDate>Tue, 12 Apr 2022 19:43:41 +0800</pubDate><description><![CDATA[目录



call函数

apply函数



call函数


    Function.prototype.mycall = function(){
            if(typeof(this) !== 'function'){  //如果调用mycall的不是一个函数
                console.log("出错了")   //则直接输出错误
            }

            let oBj = arguments[0] || window  //用o]]></description><category></category></item><item><title><![CDATA[数组扁平化]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124123412</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124123412</guid><author>YeChan414</author><pubDate>Tue, 12 Apr 2022 15:24:28 +0800</pubDate><description><![CDATA[目录



什么是数组扁平化

实现方式

1.Array的flat()方法

2.手写扁平化函数



什么是数组扁平化

数组扁平化就是将多维数组变成一维数组

实现方式

1.Array的flat()方法


let arr = [1,[2,3,4],5]
let result = arr.flat()
console.log(result)



2.手写扁平化函数


        function flat(arr){
            let result = []  //用空数组来存]]></description><category></category></item><item><title><![CDATA[函数柯里化]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124118287</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124118287</guid><author>YeChan414</author><pubDate>Tue, 12 Apr 2022 11:04:14 +0800</pubDate><description><![CDATA[目录



什么是柯里化

柯里化实现



什么是柯里化

所谓柯里化就是把具有较多参数的函数转换成具有较少参数的函数的过程

我们来看一个例子


let sum = function(a,b,c){
            return a+b+c
        }


console.log(sum(1,2,3))



这个例子实现的是1+2+3，但是我们发现传入了很多个参数，那么怎么实现柯里化，让每次只传入一个参数呢？我们要用到函数返回函数的方法


        let sum = fu.]]></description><category></category></item><item><title><![CDATA[图片懒加载]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124067173</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124067173</guid><author>YeChan414</author><pubDate>Sat, 09 Apr 2022 20:31:15 +0800</pubDate><description><![CDATA[什么是图片懒加载

当我们访问一个图片展示比较多的网页时，加载速度慢很多时候正是因为图片多导致，大量的img图片导致页面渲染的堵塞。而且若用户只查看了网页的前面部分便离开，许多已经加载却因为处于网页底部而未呈现在视口区的图片，它们极大加重服务器压力但是用户看都没看，白白浪费了性能。为了解决这些的问题，就需要引入图片懒加载，懒加载其实很好理解，重点就是一个‘懒'字。当用户滚动相应可视区域，若可视区域有图片便加载，而在可视区域外未加载过的图片它们先不加载，如果用户滚动可视区域到它们时它们再加载，否则一律不加载。]]></description><category></category></item><item><title><![CDATA[在浏览器中输入URL并回车，会发生什么]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124041601</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124041601</guid><author>YeChan414</author><pubDate>Fri, 08 Apr 2022 15:05:50 +0800</pubDate><description><![CDATA[目录

1.URL解析

2.DNS解析

3.建立TCP连接（三次握手）

4.发送HTTP请求

5.服务器接收请求、处理请求、返回响应报文

6.浏览器解析响应中的文件，渲染页面



1.URL解析

URL是统一资源定位符，由协议、域名、主机、端口号等等组成，所以浏览器拿到URL后，先对URL进行解析



2.DNS解析

DNS解析也叫做域名解析，目的是解析出URL中的域名，把域名变为IP。因为机器之间只认识IP，而域名是为了方便人类记忆所创建的，所以要先将域名变成机器可以认识的IP。DNS本]]></description><category></category></item><item><title><![CDATA[this相关]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124035801</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124035801</guid><author>YeChan414</author><pubDate>Fri, 08 Apr 2022 11:45:35 +0800</pubDate><description><![CDATA[目录



什么是this

this的五种情况分析

函数执行

事件行为触发

new一个对象

箭头函数

基于Function.prototype上的call/apply/bind方法去改变this指向



什么是this

在JS中，this指的就是执行主体，也就是说，谁执行的它，this就是谁，和在哪里创建以及在哪里执行都没有关系，只看谁执行它

this的五种情况分析

函数执行

当一个函数执行，就看它前面有没有“点”，如果没有“点”，那么this就是window，严格模式下是undefi]]></description><category></category></item><item><title><![CDATA[JS中检测数据类型的方法]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124026828</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124026828</guid><author>YeChan414</author><pubDate>Thu, 07 Apr 2022 21:55:50 +0800</pubDate><description><![CDATA[目录



typeof

instanceof

constructor

Object.prototype.toString.call(待检测值)

总结



typeof

我们最容易想到的是typeof，但是typeof漏洞很多，我们先打印一下基本数据类型（除null外）


    let a = 1
    let b = "123"
    let c = false
    let d = undefined
    
    console.log(typeof(a))
    cons]]></description><category></category></item><item><title><![CDATA[清除浮动的方法]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124017025</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124017025</guid><author>YeChan414</author><pubDate>Thu, 07 Apr 2022 15:14:53 +0800</pubDate><description><![CDATA[为什么要清除浮动

首先，我们来看一个例子，为什么要清除浮动


&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-sc]]></description><category></category></item><item><title><![CDATA[圣杯布局和双飞翼布局]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124016001</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124016001</guid><author>YeChan414</author><pubDate>Thu, 07 Apr 2022 15:00:25 +0800</pubDate><description><![CDATA[首先我们要知道圣杯布局和双飞翼布局的目的都是为了让左右两边的盒子宽度固定，中间的盒子宽度自适应

圣杯布局

实现

首先，用一个con盒子包裹3个盒子，接着，我们来设置css样式


&lt;body&gt;
    &lt;div class="con"&gt;
        &lt;div class="c"&gt;中&lt;/div&gt;
        &lt;div class="l"&gt;左&lt;/div&gt;
        &lt;div class="r"&gt;右&lt;/.]]></description><category></category></item><item><title><![CDATA[浏览器渲染页面的过程]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/124000737</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/124000737</guid><author>YeChan414</author><pubDate>Wed, 06 Apr 2022 22:09:10 +0800</pubDate><description><![CDATA[目录



渲染过程

回流和重绘

回流

重绘

回流和重绘的关系





渲染过程

首先，浏览器通过网络请求拿到要渲染的页面，之后开始从上到下依次解析

例如一个页面


&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;m.]]></description><category></category></item><item><title><![CDATA[new的作用]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/123988952</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/123988952</guid><author>YeChan414</author><pubDate>Wed, 06 Apr 2022 14:23:56 +0800</pubDate><description><![CDATA[function Fn(name,age){
            this.name = name
            this.age = age
        }
new Fn('张三',18)

如上，Fn是一个构造函数，我们使用new关键字来创建出了一个对象

那么，在这其中，new做了什么事



①创建一个对象

②将构造函数的作用域赋给这个对象，也就是说，将构造函数中的this指向该对象

③执行构造函数中的代码，也即为这个对象添加属性

④返回这个对象



我们用一个变量来接收.]]></description><category></category></item><item><title><![CDATA[slice()和splice()]]></title><link>https://blog.youkuaiyun.com/YeChan414/article/details/123970316</link><guid>https://blog.youkuaiyun.com/YeChan414/article/details/123970316</guid><author>YeChan414</author><pubDate>Tue, 05 Apr 2022 15:46:22 +0800</pubDate><description><![CDATA[这两个方法都是js中截取数组的方法，那么它们两个有什么区别呢？

slice()

slice方法，可以传入两个参数，第一个参数表示起始位置，第二个参数表示终止位置，即slice(start,end)，但是注意，这里是左闭右开，也就是说截取到的数组元素下标包括start，不包括end，这个方法不会改变原数组


    let arr = [0,1,2,3,4]
    let newArr = arr.slice(0,2)
    console.log("截取下来的是：" + newArr)
    c]]></description><category></category></item></channel></rss>