最后
面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
96道前端面试题:
常用算法面试题:
前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化
对象的侦测是借助Object.defineProperty()
这个方法。
首先定义一个对象animal:
let animal = {
name: ‘dog’,
age: 3
那么这个animal的对象的属性被修改的时候,我们是如何知道的呢,且看下面的操作:
let name = ‘cat’
Object.defineProperty(animal, ‘name’, {
configrable: true, // 描述属性是否配置,以及可否删除
enumerable: true, // 描述属性是否会出现在for in 或者 Object.keys()的遍历中
writable: true, // 属性的值是否可以被重写
get () {
// 这里读取了name的值
return name
},
set (value) {
// 这里设置了name的值
name = value
}
这样一来,当name的值被改成cat的时候,就会变的可观测,可被侦测。但是这只是做到了对象的某一个属性被侦测,但是对象的属性往往不是一个,多个的时候又该怎么办呢?其实也很简单,对,没错,就是你想说的递归。直接上代码:
// 源码位置:src/core/observer/index.js
export class Observer {
constructor (value) {
this.value = value
def(value,‘ob’,this)
if (Array.isArray(value)) {
// 当value为数组时的逻辑
} else {
this.walk(value)
}
}
walk (obj: Object) {
const keys = Object.keys(obj)
for (let i = 0; i < keys.length; i++) {
defineReactive(obj, keys[i])
}
}
}
function defineReactive (obj,key,val) {
if (arguments.length === 2) {
val = obj[key]
}