首页 > 其他分享 >面试--Vue

面试--Vue

时间:2023-01-29 14:44:20浏览次数:33  
标签:Vue console name -- Object 面试 key data log

1.你对MVVM是怎么理解的?

  MVVM是Model-View-ViewModel缩写。Model层代表数据模型,View代表视图层,ViewModel是MVVM的核心,它是连接View和Model层的桥梁,数据会绑定到viewModel层并自动将数据渲染到页面中,视图变化的时候会通知viewModel层更新数据,实现数据的双向绑定。可以不用再去低效又麻烦地通过操纵 DOM 去更新视图,专心处理和维护 ViewModel层。

2.你对Vue响应式原理是怎么理解的?是否可以实现一个简版的?Vue3使用Proxy重写,相比Vue2的Object.defineProperty,有哪些优势?

    2.1响应式原理

  • Vue2的响应式是基于Object.defineProperty实现的
  • Vue3的响应式是基于ES6的Proxy来实现的

   2.2 Vue2 Object.defineProperty简版实现代码

// 响应式函数
function reactive(obj, key, value) {
  Object.defineProperty(data, key, {
    get() {
      console.log(`访问了${key}属性`)
      return value
    },
    set(val) {
      console.log(`将${key}由->${value}->设置成->${val}`)
      if (value !== val) {
        value = val
      }
    }
  })
}

const data = {
  name: '林三心',
  age: 22
}
Object.keys(data).forEach(key => reactive(data, key, data[key]))
console.log(data.name)
// 访问了name属性
// 林三心
data.name = 'sunshine_lin' // 将name由->林三心->设置成->sunshine_lin
console.log(data.name)
// 访问了name属性
// sunshine_lin

  弊端:data新增了hobby属性,进行访问和设值,但是都不会触发get和set,所以弊端就是:Object.defineProperty只对初始对象里的属性有监听作用,而对新增的属性无效。这也是为什么Vue2中对象新增属性的修改需要使用Vue.$set来设值的原因。

// 接着上面代码

data.hobby = '打篮球'
console.log(data.hobby) // 打篮球
data.hobby = '打游戏'
console.log(data.hobby) // 打游戏

   2.3 Vue3 proxy简版实现代码

 

标签:Vue,console,name,--,Object,面试,key,data,log
From: https://www.cnblogs.com/LylePark/p/17072627.html

相关文章

  • cscope
    https://blog.csdn.net/zhangxuechao_/article/details/52187877https://blog.csdn.net/zuiaikg703/article/details/17024519https://www.cnblogs.com/yuanfang/archive......
  • golang调用钉钉webhook发送消息
    golang使用dingtalk的webhook地址,发送消息通知此处用于记录golang调用dingtalkwebhook地址发送消息通知;一、使用http包自己拼接消息体,使用http包的post请求来......
  • 详解Tomcat类加载器
    目录Tomcat简介Tomcat类加载Tomcat的基本架构是什么?Tomcat请求的处理流程Tomcat简介Tomcat服务器Apache软件基金会项目中的一个核心项目,是一个免费开源的轻量级Web应......
  • 【设计模式】行为型
    职责链模式Client->A->B->C,避免请求发送者与接收者耦合,将接收者对象连接成一条链,直到有对象处理命令模式 将请求转换为一个包含与请求相关的所有信息的独立对象。 可......
  • (转)Markdown基本语法
    转载于https://www.jianshu.com/p/191d1e21f7edMarkdown是一种纯文本格式的标记语言。通过简单的标记语法,它可以使普通文本内容具有一定的格式。相比WYSIWYG编辑器......
  • golang使用sqlx操作MySQL
     packagemain//sqlx示例import("errors""fmt"_"github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx")varDB*sqlx.DBtypeUs......
  • reset.scss
    /*reset.scss*/h1,h2,h3,h4,h5,h6{position:relative;display:flex;margin:0;padding:0;margin-block-start:0;margin-block-end:0;......
  • golang连接操作mysql
    golang操作mysqlpackagemainimport("database/sql""fmt""time"_"github.com/go-sql-driver/mysql")//定义一个全局db对象vardb*sql.DB......
  • 2023考试计划
    初级会计职称报名时间“2023年初级会计职称考试报名时间为2023年2月7日至2月28日,......
  • Node.js 安装配置
    本章节我们将向大家介绍在Windows和Linux上安装Node.js的方法。本安装教程以Node.jsv4.4.3LTS(长期支持版本)版本为例。Node.js安装包及源码下载地址为:https:/......