就一张图,没什么其他的。
1. 通过原型链实现继承
1 | // 1.定义父类构造函数 |
优点: 子类可以继承父类的方法
缺点:
2. 借用构造函数继承
1 | // 1.定义父类构造函数 |
在子类中可以通过apply或call调用都可以
优点:属性不会被共享,可以给父类传入参数
缺点:父类的方法不能复用,子类实例的方法每次都是单独创建的。
more >>属性描述符需要使用到Object.defineProperty
接收三个参数:
第一个参数: obj
第二个参数: prop要定义或修改的属性的名称或Symbol
第三个参数: descriptor要定义或修改的属性描述
属性描述符有类:数据属性、存取属性
数据属性描述符
设置为false不可配置(不可被删除,不可在把值变为true),默认为true
1 | Object.defineProperty({ |
设为false不可被枚举
不可被写入(只读)
设置之后每次读取的值都为固定的值。
存取属性描述符
当定义的属性被修改/赋值,就会执行set方法,并将修改的值传入set函数的参数中。
1 | var _name = '' // 私有变量 |
在调用obj.name就会执行get方法,默认的值也为undefined。
Object.defineProperties
可以监听多个属性描述符。
通过for循环遍历存入新的数组
1 | var newArguments = [] |
Array.from() (ES6中的方式)
from()中传入一个可迭代对象
var newArgs1 = Array.from(arguments)
...
的语法 (ES6中的方式)
var newArgs2 = [...arguments]
使用slice()方法
var newArgs3 = [].slice.apply(arguments)
var newArgs3 = Array.prototype.slice.apply(arguments)
slice也可以说是一种浅拷贝的方法。
slice不会对原数组进行修改,而是返回一个新数组。(纯函数)
splice会返回一个新数组,也会对原数组进行修改。
箭头函数中没有arguments
more >>引用计数(Reference Counting)
当有一个对象引用指向它时,那么这个对象就+1
当一个对象的引用为0时,这个对象就被销毁掉了
ex: 循环引用
1 | obj1 = {} |
标记清除(Mark-Sweep)
标记清除的核心思想就是可达性(Reachability)
描述: 这个算法是设置一个根对象(Root Object/window/Global Object,在不同地方有不同的叫法,但是i都是指的同一个对象),垃圾回收器会定期从这个根开始,找所有从这个根开始有引用到的对象,对于那么没有引用到的对象,就认为是不可用对象。
这个算法能很好的解决循环引用的问题
ex:
1 | var RootObject = { |
回流
回流reflow: (也可以称之为重排)
重绘
第一次渲染内容称之为绘制(paint)
之后重新渲染称之为重绘
回流一定会引起重绘,所以需要尽量避免回流,且非常消耗浏览器性能。
避免回流的方式:
严格模式下,独立调用的函数的this指向时undefined
typeof null => object
typeof undefined => undefined
箭头函数的返回值如果是一个对象,需要加一个小括号()
item => ({ name: ‘beichen’ })
优先级排序
1.new
2.bind
3.apply/call
4.隐式绑定
5.默认绑定(独立函数调用)
sb面试题function foo() { console.log(this) } var obj1 = { name: 'obj1', foo: foo } var obj2 = { name: 'obj2' }; (obj2.foo = obj1.foo)() // this => Window
在你项目的目录下,vscode的终端(这里需要把bash设置为vscode终端的默认启动项),或者是在项目的目录下打开git bash。
git config --global user.name "yourname"
git config --global user.password "password"
git config --global user.email "your_email@youremail.com"
也可以通过git config --list
查看你所添加的这些属性
ssh-keygen -t rsa -C "your_email@youremail.com"
然后将你的C -> user-> <用户名> -> .ssh -> id_rsa.pub(也就是公匙)
ctrl+a全选复制,粘贴到刚才你的执行的生成密钥的哪里,然后一直回车就可以了
ssh -T git@github.com
可以验证你的密钥是否添加成功,在github的仓库中也可以添加密钥。
more >>这里的是简单实现了一下输入框获取焦点的自定义指令
这里的v-focus,focus是我们自己定义的,前缀是v-
,简单来说就是v-
+ 自定义的名称
。
这里的局部指令是仅限于当前组件中,我们需要在那个地方获取焦点,就将v-focus
添加到那个标签里面。
1 | <template> |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true