<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Master12138的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Master12138</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Master12138]]></copyright><item><title><![CDATA[axios 拦截器实现原理]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/125613442</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/125613442</guid><author>Master12138</author><pubDate>Tue, 05 Jul 2022 10:57:36 +0800</pubDate><description><![CDATA[axios拦截器原理]]></description><category></category></item><item><title><![CDATA[proxy学习]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116781566</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116781566</guid><author>Master12138</author><pubDate>Fri, 21 May 2021 11:29:13 +0800</pubDate><description><![CDATA[Proxy
Proxy对象用于创建一个对象的代理，从而实现基本操作的拦截和自定义（如属性查找、赋值、枚举、函数调用等）
语法
/*
* 参数
* target 要使用Proxy包装的目标对象（可以是任何类型的对象、包括原生数组，函数，甚至另一个代理）
* handler 一个通常以函数作为属性的对象，各属性中的函数分别定义了再执行各种操作时代理p的行为
*/
const p = new Proxy(target,handler)

方法
Proxy.revocable
/*
* 创建一个可撤销的Proxy对]]></description><category></category></item><item><title><![CDATA[new 操作符的模拟实现]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116597261</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116597261</guid><author>Master12138</author><pubDate>Mon, 10 May 2021 15:37:10 +0800</pubDate><description><![CDATA[function objectFactory(){
	let obj = {};
	let constructor = Array.prototype.shift.call(arguments);
	obj.__proto__=constructor.prototype;
	let result = constructor.apply(obj,arguments);
	return typeof result === 'object'?result:obj;
}


]]></description><category></category></item><item><title><![CDATA[V8垃圾回收策略]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116534598</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116534598</guid><author>Master12138</author><pubDate>Sat, 08 May 2021 17:31:32 +0800</pubDate><description><![CDATA[V8的垃圾回收策略主要是基于分带式垃圾回收机制，根据对象的存活时间将内存的垃圾回收进行不同的分代，然后对不同的分代采用不同的垃圾回收算法

新生代回收机制
新生代的垃圾回收过程主要是用Scavenge算法，在Scavenge算法的具体实现中，主要采用了Cheney算法，将新生代内存一分为二，每个部分的空间称为Semispace，其中处于激活状态的区域称为From空间，未激活的区域称为To空间。这两个空间中，始终只有一个处于使用状态，另一个处于闲置状态。程序中声明的对象首先会被分配到From空间，当进行垃圾回]]></description><category></category></item><item><title><![CDATA[call、apply和bind]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116527756</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116527756</guid><author>Master12138</author><pubDate>Sat, 08 May 2021 15:45:30 +0800</pubDate><description><![CDATA[call
call()方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法
Function.prototype.call=function(context) {
	context=context || Window;
	context.fn=this;
	let args=[];
	for(let i=1;i&lt;arguments.length;i++) {
		args.push("arguments["+i+"]");
	}
	let result = eval('cont]]></description><category></category></item><item><title><![CDATA[判断数据类型的方法]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116519433</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116519433</guid><author>Master12138</author><pubDate>Sat, 08 May 2021 11:04:39 +0800</pubDate><description><![CDATA[typeof
typeof 可以判断的数据类型有Number、String、Boolean、Symbol、undefined、Object、Function
注意点：
typeof会将null判断为object，原因是因为表达类型信息的数据码中null和object的是一样的
Object.prototype.toString.call
Object.prototype.toString.call(1) // [Object Number]
Object.prototype.toString.call('h]]></description><category></category></item><item><title><![CDATA[运算符优先级]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116459106</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116459106</guid><author>Master12138</author><pubDate>Fri, 07 May 2021 17:09:04 +0800</pubDate><description><![CDATA[关联性
关联性决定了拥有相同优先级的运算符的执行顺序
a OP b OP c

左关联（左到右）相当于把左边的子表达式加上小括号(a OP b) OP c,右关联（右到左）相当于a OP (b OP c)
优先级从高（20）到低（1）排列




优先级
运算类型
关联性
运算符




21
圆括号
n/a(不相关)
(…)


20
成员访问
从左到右
… . …


20
需要计算的成员访问
从左到右
…[…]


20
new(带参数列表)
n/a
new … (…)



...]]></description><category></category></item><item><title><![CDATA[实现instanceof方法]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116239766</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116239766</guid><author>Master12138</author><pubDate>Wed, 28 Apr 2021 18:00:12 +0800</pubDate><description><![CDATA[function instanceof_myself(leftValue,rightValue) {
    let rightPrototype = rightValue.prototype; //获取右侧构造函数对应的原型
    let leftProto=leftValue.__proto__;//获取左侧实例对应的原型
    while(true) {
        if (leftProto === null) {
            return false;
        } el]]></description><category></category></item><item><title><![CDATA[俩栏自适应布局]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/116236312</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/116236312</guid><author>Master12138</author><pubDate>Wed, 28 Apr 2021 16:10:53 +0800</pubDate><description><![CDATA[&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Title&lt;/title&gt;
    &lt;link rel="stylesheet" href="index.css"&gt;
    &lt;script src="index.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;style type]]></description><category></category></item><item><title><![CDATA[JavaScript中微任务和宏任务]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/113181302</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/113181302</guid><author>Master12138</author><pubDate>Tue, 26 Jan 2021 15:32:18 +0800</pubDate><description><![CDATA[宏任务
script(整体代码)
setTimeout
setInterval
I/O
UI交互事件
postMessage
MessageChannel
setImmediate(Node.js)

微任务
Promise.then
Object.observe
MutaionObserver
process.nextTick(Node.js)

执行顺序
宏任务--&gt;微任务--&gt;渲染--&gt;宏任务


...]]></description><category></category></item><item><title><![CDATA[npm run build执行的操作]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/110431597</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/110431597</guid><author>Master12138</author><pubDate>Fri, 18 Dec 2020 11:20:00 +0800</pubDate><description><![CDATA[...
"scripts":{
	//执行build/build.js文件
	"build":"node build/build.js" 
}

build.js
'use strict'
//执行check-version.js文件
require('./check-versions')()

process.env.NODE_ENV = 'production'
//进度转轮，用于node的控制台进度美化，https://www.npmjs.com/package/ora
const ora = req]]></description><category></category></item><item><title><![CDATA[flex布局学习]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/110393951</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/110393951</guid><author>Master12138</author><pubDate>Wed, 02 Dec 2020 09:38:59 +0800</pubDate><description><![CDATA[Flex(Flexible Box) 是一种弹性布局，用于盒状模型；
任何一种容器都可以指定为Flex布局
.box {display:flex;}

注意：行内元素使用display:flex;会变成块级元素
行内元素可以使用inline-flex进行flex布局
.box{display:inline-flex;}

注意：设置为Flex布局之后，子元素的float、clear和vertical-align属性都会失效
容器默认存在两根轴：水平的主轴（main axis）和垂直的交叉轴（cross ax]]></description><category></category></item><item><title><![CDATA[vue-cli 中npm run dev 执行的操作]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/109385958</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/109385958</guid><author>Master12138</author><pubDate>Mon, 30 Nov 2020 15:08:46 +0800</pubDate><description><![CDATA[//
...
scripts:{
	"dev":"webpack-dev-server --inline --progress 
	--config build/webpack.dev.conf.js"
	...
}
...


]]></description><category></category></item><item><title><![CDATA[vue-cli webpack.base.conf.js学习]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/110388525</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/110388525</guid><author>Master12138</author><pubDate>Mon, 30 Nov 2020 14:59:24 +0800</pubDate><description><![CDATA['use strict'
//引入nodejs路径模块
const path = require('path')
//引入utils工具模块，utile主要用来处理css-loader和vue-style-loader
const utils = require('./utils')
//引入config/index.js配置文件，定义开发和生产环境的属性
const config = require('../config')
//vue-loader.conf配置文件，主要是配置vue-loader的op]]></description><category></category></item><item><title><![CDATA[vue-cli vue-loader.conf.js学习]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/110388494</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/110388494</guid><author>Master12138</author><pubDate>Mon, 30 Nov 2020 14:58:32 +0800</pubDate><description><![CDATA['use strict'
//导入utils.js
const utils = require('./utils')
//导入config/index.js
const config = require('../config')
//判断是否是生产环境
const isProduction = process.env.NODE_ENV === 'production'
//根据环境来判断是否执行sourceMap
const sourceMapEnabled = isProduction
  ? confi]]></description><category></category></item><item><title><![CDATA[vue-cli utils.js文件学习]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/110388454</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/110388454</guid><author>Master12138</author><pubDate>Mon, 30 Nov 2020 14:57:36 +0800</pubDate><description><![CDATA['use strict'
// node中的path模块
const path = require('path')
//引入config/index.js文件
const config = require('../config')
//从bundle中提取文本(CSS)到单独的文件
const ExtractTextPlugin = require('extract-text-webpack-plugin')
//引入package.json文件
const packageConfig = require(]]></description><category></category></item><item><title><![CDATA[less学习手册记录]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/109067990</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/109067990</guid><author>Master12138</author><pubDate>Wed, 28 Oct 2020 18:10:09 +0800</pubDate><description><![CDATA[变量（Variables）
@width:10px;
@height:@width+10px;

#header {
	width:@width,
	height:@height
}

混入（Mixins）
.bordered {
	border-top:dotted 1px black;
	border-bottom:solid 2px black;
}
#id{
	width:100px
}

#menu a {
	color:#111;
	.bordered();
	#id();
}

嵌套（Nest]]></description><category></category></item><item><title><![CDATA[requireJS中引入Vue和ElementUI]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/109057229</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/109057229</guid><author>Master12138</author><pubDate>Tue, 13 Oct 2020 18:01:49 +0800</pubDate><description><![CDATA[首先下载vue.js并且通过npm 下载ElementUI的包，其中ElementUI包中的lib文件是umd版本支持requireJS引入；
具体操作：
//require依赖文件中
var require={
	baseUrl:'./src/',
	map:{
		'*':{'style':'assets/lib/requirejs/css.min'}
	},
	paths:{
		'vue':'assets/lib/vue/dist/vue',
		'ELEMENT':'assets/lib/elem]]></description><category></category></item><item><title><![CDATA[@antv/g2踩坑记录]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/108777808</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/108777808</guid><author>Master12138</author><pubDate>Mon, 28 Sep 2020 10:41:21 +0800</pubDate><description><![CDATA[自定义tooltip
//需要先在绘图时配置自定义tooltip的需要的字段
chart.point()
.position('value*1')
.shape("pointer")
.tooltip('name*value*date',(name,value,date)=&gt;{
	retrun {
		name,
		value,date
	}
})
//配置自定义tooltip
chart.tooltip({
	showContent:true,
	showTitle:false,
	title:"]]></description><category></category></item><item><title><![CDATA[webpack配置学习-下]]></title><link>https://blog.youkuaiyun.com/Master12138/article/details/108077678</link><guid>https://blog.youkuaiyun.com/Master12138/article/details/108077678</guid><author>Master12138</author><pubDate>Thu, 24 Sep 2020 16:28:05 +0800</pubDate><description><![CDATA[devServer

]]></description><category></category></item></channel></rss>