每日三问之rem与em区别、Vue Set基本用法与使用场景、手写call、apply、bind方法

article/2025/4/25 6:11:36

 rem与em区别

在css中单位长度用的最多的是px、em、rem,这三个的区别是:

  • px是固定的像素,一旦设置了就无法因为适应页面大小而改变。
  • em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定死了的,更适用于响应式布局。
  • 对于em和rem的区别一句话概括:em相对于父元素,rem相对于根元素。
  • rem中的r意思是root(根源),这也就不难理解了

em

  • 子元素字体大小的em是相对于父元素字体大小
  • 元素的width/height/padding/margin用em的话是相对于该元素的font-size
<div>我是父元素div<p>我是子元素p<span>我是孙元素span</span></p>
</div>
div {font-size: 40px;width: 10em; /* 400px */height: 10em;border: solid 1px black;
}
p {font-size: 0.5em; /* 20px */ width: 10em; /* 200px */height: 10em;border: solid 1px red;
}
span {font-size: 0.5em;  width: 10em;height: 10em;border: solid 1px blue;display: block;
}

巩固测验:你能说出孙元素span的font-size和width吗?

答案:我猜你会说10px、100px,哈哈,其实逻辑上是正确的,但是如果你是chrome浏览器我不得不告诉你应该是12px、120px。因为chrome设置的最小

字体大小为12px,意思就是说低于12px的字体大小会被默认为12px,当然这一尬境可以由css3解决,这里就不多说了。

chrome默认的字体大小是12px,也就是1em默认为12px,如果最外层的父元素直接把font-size设为1.5em,那么该元素的字体大小为18px(12*1.5)。

rem

rem是全部的长度都相对于根元素,根元素是谁?<html>元素。通常做法是给html元素设置一个字体大小,然后其他元素的长度单位就为rem。

html {font-size: 10px;}
div {font-size: 4rem; /* 40px */width: 30rem;  /* 300px */height: 30rem;border: solid 1px black;
}
p {font-size: 2rem; /* 20px */width: 15rem;height: 15rem;border: solid 1px red;
}
span {font-size: 1.5rem;width: 10rem;height: 10rem;border: solid 1px blue;display: block;
}

Vue Set基本用法与使用场景 

  • 基本用法

Vue.set( target, propertyName/index, value )

  • 参数

    • {Object | Array} target
    • {string | number} propertyName/index
    • {any} value
  • 返回值:设置的值。

var vm =new Vue({el:'#app',data:{items:['a', 'b', 'c']},methods:{btn(){Vue.set(this.items, 1, 'e')console.log(this.items)}}
})
  •  使用场景 

只有先定义在data 里 数据才具有响应式,如果自己后添加的属性是不具备响应式的。

场景1:通过数组的下标去修改数组的值,数据已经被修改了,但是不触发updated函数,视图不更新。

data () {return {items: ['a', 'b', 'c']};},
methods: {changeItem2 () {this.$set(this.items, 0, 'x');console.log(222, this.items[0]);},
}

场景2: vue中检测不到对象属性的添加和删除。

data() {userProfile: {name: '小明',}
}
addProperty () {this.$set(this.userProfile, 'age', '12');// { name: '小明', age: '12'}}

简单的解释一下原理:

        vue在创建实例的时候把data深度遍历所有属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。让 Vue 追踪依赖,在属性被访问和修改时通知变化。所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。
        当你在对象上新加了一个属性 newProperty,当前新加的这个属性并没有加入vue检测数据更新的机制(因为是在初始化之后添加的),vue.$set是能让vue知道你添加了属性, 它会给你做处理。

手写call、apply、bind方法

  • call和apply实现思路主要是:
    • 判断是否是函数调用,若非函数调用抛异常
    • 通过新对象(context)来调用函数
      • 给context创建一个fn设置为需要调用的函数
      • 结束调用完之后删除fn
  • bind实现思路
    • 判断是否是函数调用,若非函数调用抛异常
    • 返回函数
      • 判断函数的调用方式,是否是被new出来的
        • new出来的话返回空对象,但是实例的__proto__指向_thisprototype
    • 完成函数柯里化
      • Array.prototype.slice.call()
  • call
Function.prototype.myCall = function (context) {// 先判断调用myCall是不是一个函数// 这里的this就是调用myCall的if (typeof this !== 'function') {throw new TypeError("Not a Function")}// 不传参数默认为windowcontext = context || window// 保存thiscontext.fn = this// 保存参数let args = Array.from(arguments).slice(1)   //Array.from 把伪数组对象转为数组// 调用函数let result = context.fn(...args)delete context.fnreturn result}
  • apply
Function.prototype.myApply = function (context) {// 判断this是不是函数if (typeof this !== "function") {throw new TypeError("Not a Function")}let result// 默认是windowcontext = context || window// 保存thiscontext.fn = this// 是否传参if (arguments[1]) {result = context.fn(...arguments[1])} else {result = context.fn()}delete context.fnreturn result}
  • bind
Function.prototype.myApply = function (context) {// 判断this是不是函数if (typeof this !== "function") {throw new TypeError("Not a Function")}let result// 默认是windowcontext = context || window// 保存thiscontext.fn = this// 是否传参if (arguments[1]) {result = context.fn(...arguments[1])} else {result = context.fn()}delete context.fnreturn result}


http://chatgpt.dhexx.cn/article/LeJJ0ZBD.shtml

相关文章

IntelliJ 代码规范检查设置

IntelliJ → Preferences → Code Style → Inspections 在这里可以设置各种文件格式的规范检查 安装了阿里代码规约插件以后就会多出一项 Ali-Check &#xff08;请先安装阿里的代码规约插件 IntelliJ 代码规范检查插件&#xff09; 为了让大家统一规范规则&#xff0c;我们…

macOS借助vmware隔离运行aTrust,实现宿主机“干净”连入局域网

aTrust是深信服原easyconnect的升级产品&#xff0c;重点打造了一个“零信任”的概念&#xff0c;就是这个概念让我头皮发麻&#xff0c;其在官网直接挂着 终端检测深入&#xff1a;支持进程级检测&#xff0c;可发现和阻止终端上非可信应用进程&#xff1b;在登录时、每一次访…

基于云开发的答题活动小程序v2.0-用云开发的聚合能力实现从题库中随机出题功能

项目技术栈 微信原生小程序云开发。为什么选择微信原生小程序进行开发呢&#xff1f;因为能够直接应用它的云开发能力吖。 我这里主要使用了云开发能力中的小程序端SDK&#xff0c;说白了就是在javascript中就能直接操作数据库。 本篇前言 基于云开发的答题活动小程序v2.0的…

国内唯一!腾讯零信任iOA入选全球UEM厂商全景图

近日&#xff0c;国际权威机构Forrester发布《The Unified Endpoint Management Landscape, Q3 2023》&#xff08;以下简称“报告”&#xff09;&#xff0c;对全球24家统一终端管理厂商进行了综合性评估&#xff0c;腾讯安全凭借零信任iOA在DEX&#xff08;数字化员工体验&am…

VMware:速修复这三个严重的 Workspace ONE Assist 软件漏洞

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 VMware 修复了影响 Workspace ONE Assist 解决方案中的五个漏洞&#xff0c;其中一些可悲用于绕过认证并获取提升后的权限。 其中三个漏洞CVE-2022-31685、CVE-2022-31686和CVE-2022-31687…

Linux 服务器 OOM 分析

1 服务器告警短信 【监控告警】告警名称:商业业务数字科技中心机器发生oom, 状态:CRITICAL, 环境:xxx-阿里云-生产集群(生产)-生产, 告警内容: log.sys.oom(max,120s) > 0,当前值&#xff1a;1.00, 资源类型:服务器(n9e), 告警对象:10.231.82.xxx, 触发时间:2021-11-02 18:2…

Linux easy_install scrapy 报错 Not a recognized archive type: /tmp/easy_install-uem5ldyz/Twisted-18.9.

(本人用的服务器是CentOS7.3, python版本是3.7.0&#xff0c;自己的服务器用的是root用户&#xff0c;哈哈&#xff01;) 按照正常步骤安装scrapy 1.首先升级yum源 sudo yum update 2.安装依赖包 sudo yum -y install libxslt-devel pyOpenSSL python-lxml python-devel g…

启用Desktop Central Cloud:以SaaS方式拥抱UEM !

Desktop Central是一个全面的统一终端管理(UEM)解决方案&#xff0c;可以动态地保护和管理用户设备&#xff0c;包括台式机、笔记本电脑、智能手机和平板电脑。 KuppingerCole在其2020年领导者指南中将ManageEngine Desktop Central评为统一终端管理(UEM)领导者。 作为UEM领域…

重大福利!优云UEM重磅上线!

“千呼万唤始出来”&#xff0c;万众期待的优云UEM正式与宝宝们见面啦~~~ 今天很多人来问小编&#xff0c;优云Web咋不见了&#xff0c;表急&#xff0c;优云Web并没有消失&#xff0c;而是重磅升级为优云UEM啦&#xff01;&#xff01;&#xff01; 什么是UEM呢&#xff1f;UE…

UEM用户行为了如指掌!

“千呼万唤始出来”&#xff0c;万众期待的UEM正式与宝宝们见面啦~~~ 今天很多人来问小编&#xff0c;Web咋不见了&#xff0c;表急&#xff0c;Web并没有消失&#xff0c;而是重磅升级为UEM啦&#xff01;&#xff01;&#xff01; 什么是UEM呢&#xff1f;UEM全称User Experi…

UEM“探针”技术及用户体验管理

随着互联网产品越来越多&#xff0c;用户群体越来越庞大以及用户品位的多样性增加&#xff0c;我们会发现这样的一个规律&#xff0c;就是相同类型的产品&#xff0c;比如播放器中的QQ影音和暴风影音&#xff0c;再比如小游戏平台中的腾讯游戏和联众等等&#xff0c;他们的功能…

ManageEngine卓豪在2022年度“IDC MarketScape UEM评估报告”中被评为领导者

今天&#xff0c;我们很高兴地与大家分享ManageEngine卓豪在IDC&#xff08;国际数据公司&#xff09;近期发布的三项关于统一端点管理 (UEM) 市场供应商评估报告中被评为领导者&#xff1a; IDC MarketScape&#xff1a;全球统一端点管理软件 2022供应商评估IDC MarketScape&…

CISA 督促VMware 管理员修复Workspace ONE UEM 中的严重漏洞

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 CISA 要求 VMware 管理员和用户修复 Workspace ONE UEM 控制台中的严重漏洞&#xff0c;它可遭威胁者滥用&#xff0c;获得对敏感信息的访问权限。 Workspace ONE UEM 是桌面、移动、固件、…

VMware Workspace ONE UEM安装部署

环境信息 角色 操作系统 IPDBwindows server 2012192.168.1.69UEMwindows server 2016192.168.1.169一:数据库安装 数据库安装跳过! 二:UEM数据库工具安装 1、双击运行安装包 2、安装

UEM系列(一)用户体验管理介绍

随着互联网产品越来越多,用户群体越来越庞大以及用户品位的多样性增加,我们会发现这样的一个规律,就是相同类型的产品,比如播放器中的QQ影音和暴风影音,再比如小游戏平台中的腾讯游戏和联众等等,他们的功能是相同的或者是相似的,但是对于用户来说,每个人都有着不同的使…

UEM系列(二)初识UEM“探针”技术

本篇是UEM系列的第二篇,今天让我们一起来初识一下UEM当中的"探针"技术。欢迎大家访问以下链接来阅读我们UEM系列以往的文章。 链接:https://www.toutiao.com/i6600983314784322056/ 1、 UEM核心功能 用户体验一般分为移动应用体验(UEM App)和浏览器应用体验(…

(软件工程复习核心重点)第三章需求分析习题

pdf下载&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】软件工程导论第六版&#xff08;张海藩&#xff09;专栏学习笔记目录导航 文章目录 一&#xff1a;选择题二&#xff1a;填空题三&#xff1a;名词解释&#xff08;1&#xff09;必考 四&#xff1a;简答题&am…

软件工程 | 第三章 需求分析

软件工程 系列为本学期&#xff08;2020春季&#xff09;软件工程以及软件工程实践课程笔记整理~ 明天醒来又是新的一周&#xff0c;从软件工程开始。。。 目录 一、可行性分析 二、需求分析-->决定软件产品质量的关键 三、需求诱导-->将用户真正需求挖掘出来 四、结…

【软件工程】二、需求分析——怎么提需求?,怎么写需求?

一、需求的作用 需求是解决问题的前提。 其中标注为软件系统工程的一些活动&#xff0c;是作为系统工程工作的一部分被实施的。 Q&#xff1a;什么样的陈述可以被称为需求? 1.这个需求是否有必要&#xff1f;–>必要的&#xff08;Necessary&#xff09; 2.会不会产生歧…

软件工程技术--第三章 需求分析

第三章 需求分析 需求分析 ​ 需求分析的任务是要准确地定义新系统的目标&#xff0c;准确回答“系统必须做什么”的问题&#xff0c;并用需求规格说明书规范的形式准确地表达用户的需求。 ​ 虽然在可行性研究阶段&#xff0c;对用户需求有了初步了解&#xff0c;但对需求的了…