2024年Web前端最新Vue源码解析:数据双向绑定(响应式)原理(1),阿里前端开发面试解答

最后

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

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]

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值