前言
先介绍一下自己的情况吧
文章转载,下面用第一人称:
内蒙古呼和浩特某大学毕业,专科,计算机多媒体专业毕业 16年出来工作,工作经验四年,之前主要做平面相关,自己喜欢瞎折腾,从17年开始研究前端,然后公司内部转岗到开发部门工作,算下来前端经验也快三年之久。
年底由于种种原因想换一份工作,但由于太忙,没认真搞简历,也没怎么复习基础,导致很多本来会的都没敢往简历上写。于是写了一个简版的简历挂在Boss直聘上,准备年过完再认真筹备这件事情。 令我意外的是,近一个月收到多家公司的面试邀请。
因此总结一波2020年最新面试题,希望对大家有所帮助!后面的答案为自行整理,如有疏漏,欢迎指正!
2020 前端面试 | 第二波面试题总结
面试总结
- 重视基础和原理
- 重视基础和原理
- 重视基础和原理
以下面试均为电话面试
一面
- 原型
构造函数是一种特殊的方法,主要用来在创建对象时初始化对象。每个构造函数都有prototype(原型)(箭头函数以及Function.prototype.bind()没有)属性,
这个prototype(原型)属性是一个指针,指向一个对象,这个对象的用途是包含特定类型的所有实例共享的
属性和方法,即这个原型对象是用来给实例对象共享属性和方法的。每个实例对象的__proto__都指向这个
构造函数/类的prototype属性。
面向对象的三大特性:继承/多态/封装
关于new操作符:
1. new执行的函数, 函数内部默认生成了一个对象
2. 函数内部的this默认指向了这个new生成的对象
3. new执行函数生成的这个对象, 是函数的默认返回值
ES5例子:
function Person(obj) {
this.name = obj.name
this.age= obj.age
}
// 原型方法
Person.prototype.say = function() {
console.log('你好,', this.name )
}
// p为实例化对象,new Person()这个操作称为构造函数的实例化
let p = new Person({name: '番茄', age: '27'})
console.log(p.name, p.age)
p.say()
ES6例子:
class Person{
constructor(obj) {
this.name = obj.name
this.age= obj.age
}
say() {
console.log(this.name)
}
}
let p = new Person({name: 'ES6-番茄', age: '27'})
console.log(p.name, p.age)
p.say()
关于原型的继承我们借助寄生组合继承
function Person(obj) {
this.name = obj.name
this.age = obj.age
}
Person.prototype.add = function(value){
console.log(value)
}
var p1 = new Person({name:"番茄", age: 18})
function Person1(obj) {
Person.call(this, obj)
this.sex = obj.sex
}
// 这一步是继承的关键
Person1.prototype = Object.create(Person.prototype)
Person1.prototype.play = function(value){
console.log(value)
}
var p2 = new Person1({name:"鸡蛋", age: 118, sex: "男"})
闭包
首先说明什么是闭包,闭包简单来说就是函数嵌套函数,内部函数引用来外部函数的变量,从而导致垃圾回收
机制没有把当前变量回收掉,这样的操作带来了内存泄漏的影响,当内存泄漏到一定程度会影响你的项目运行
变得卡顿等等问题。因此在项目中我们要尽量避免内存泄漏。
原型链
原型链实际上在上面原型的问题中就有涉及到,在原型的继承中,我们继承来多个原型,这里再提一下实现完美
继承的方案,通过借助寄生组合继承,PersonB.prototype = Object.create(PersonA.prototype)
这是当我们实例化PersonB得到实例化对象,访问实例化对象的属性时会触发get方法,它会先在自身属性上查
找,如果没有这个属性,就会去__proto__中查找,一层层向上直到查找到顶层对象Object,这个查找的过程
就是原型链来。
vuex
vuex是一个专为vue.js应用程序开发的状态管理器,它采用集中式存储管理应用的所有组件的状态,并且以相
应的规则保证状态以一种可以预测的方式发生变化。
state: vuex使用单一状态树,用一个对象就包含来全部的应用层级状态
mutation: 更改vuex中state的状态的唯一方法就是提交mutation
action: action提交的是mutation,而不是直接变更状态,action可以包含任意异步操作
getter: 相当于vue中的computed计算属