我被冻在了 vue2 源码工具函数第一行Object.freeze()(一)

最近参加若川的源码共度活动,第 24 期 vue2 源码工具函数,最开始:

var emptyObject = Object.freeze({});

之前知道 Object.freeze() 是冻结,可是具体是什么呢,错过了就错过了,要不看看吧,那就看看吧,嗯,我这种读源码的方式比较低效,但是还是得看看,不然后面的都不易于理解,就暂且打打基础。

Object.freeze()
Try it
Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的 可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

可枚举型、可配置性、可写性,啥意思,要不搜搜?嗯,搜搜。

看完了这篇,懂了 enumerable,那可配置性呢,继续搜。

看过中文,英文看着还可以理解。

由于看过第一篇,所以第二篇的标题写错了,加上原文链接是 enumerable,所以,enumerable 是可枚举型,并不是可迭代性 iterable。

所以引用 MDN Web Docs 里的名字,JavaScript 的 可枚举性、可配置性、可写性是什么意思呢?

现总结如下。

读后感

  • 讲 JS 对象的属性的可枚举性(属性的 enumerable):

    如果为 false,(for..in 循环、Object.keys 方法、JSON.stringify 方法)这三个操作不会取到该属性。

  • 我的示例
// 1. 一个没隐式原型的对象a,没有继承性,因为对象a太美了。a自己有 aa aaa aaaa 三个属性
let a = Object.create(null);
a.aa = 1;
a.aaa = 2;
a.aaaa = 3;

// 2. 弄一个对象b,b继承了a的美貌。b自己也有 b bb bbb 仨属性。
let b = Object.create(a);
b;
b.b = "b1";
b.bb = "b2";
b.bbb = 333;

// 3. for...in 循环,发现了对象 b 拥有 b bb bbb 和 a aa aaa 一共六个属性的值,属性就是什么方面美,值就是什么方面具体到多少,a4腰,1.8米大长腿。
for (let key in b) {
  console.log(b[key]);
} // for...in 循环
// b1
// b2
// 333
// 1
// 2
// 3

// 4. Object.keys() 列出 对象的 属性什么方面美。
Object.keys(b); // ['b', 'bb', 'bbb']

// 5. JSON.stringify() 列出了 对象b 拥有 的属性和值,{腰:a4,腿:1.8m}
JSON.stringify(b); // '{"b":"b1","bb":"b2","bbb":333}'

// 6. enumerable 是枚举的,列出,上面 3 4 5 都罗列了 对象b 的属性及其值,所以是可枚举性。

// 7. Object.getOwnPropertyNames() 罗列 对象b 所有属性(包括 可枚举性属性 & 不可枚举性属性),发现:b bb bbb 都是可枚举属性,因为是[.key]的方式定义的嘛。
Object.getOwnPropertyNames(b); // ['b', 'bb', 'bbb']

// 8. Object.defineProperty() 新建 | 修改属性。因为 b 没有 属性 bbbb,所以给对象b定义新属性bbbb,值34,设置属性bbbb具有不可枚举性。
Object.defineProperty(b, "bbbb", { value: 34, enumerable: false }); // {b: 'b1', bb: 'b2', bbb: 333, bbbb: 34}

// 9. 罗列b的属性key,发现没有bbbb,因为上面设置了enumerable为false
Object.keys(b); // (3) ['b', 'bb', 'bbb']

// 10. 获取 对象b 的 光明正大定义的属性 和悄悄定义的属性。
Object.getOwnPropertyNames(b); // (4) ['b', 'bb', 'bbb', 'bbbb']

Original: https://www.cnblogs.com/djsz3y/p/16206546.html
Author: SnippetsLab
Title: 我被冻在了 vue2 源码工具函数第一行Object.freeze()(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/605277/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • C/C++内存泄漏检测方法

    内存泄漏 检测代码 使用链表记录每个malloc返回的指针,释放时从链表中查找并删除找到对应指针的节点。 最终输出链表,该链表记录了所有没有释放的动态内存。 #include #i…

    数据结构和算法 2023年6月8日
    064
  • AcWing 第13场周赛

    生成一种排列,但排列不能升序 不能是升序的原因,因为(a_i≠i),而序列全是都是唯一值,升序存在一种可能1,2,3,…,n 此时(a_i=i) 这里提供一种解法 第n…

    数据结构和算法 2023年6月7日
    050
  • 神经网络 CNN 名词解释

    隐藏层 不是输入或输出层的所有层都称为隐藏层. 激活和池化都没有权重 使层与操作区分开的原因在于层具有权重。由于池操作和激活功能没有权重,因此我们将它们称为操作,并将其视为已添加到…

    数据结构和算法 2023年6月16日
    0151
  • 0017:【模板】树状数组-uf0_金币灰黄

    题目链接:https://www.luogu.com.cn/problem/P3374 题目描述: 已知一个数列,你需要进行下面两种操作: 1.将某一个数加上 x 2.求出某区间每…

    数据结构和算法 2023年6月12日
    088
  • CYaRon!语

    P3695 CYaRon!语 开始之前 上次水了些小模拟之后感觉不能再颓废了,于是就来大模拟。 然后这个题花了我一个多星期 还是最差解 不过,为了纪念我的第 20 道紫题,纪念我这…

    数据结构和算法 2023年6月12日
    078
  • SP20173 题解

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据结构和算法 2023年6月12日
    089
  • %与mod的区别

    %与mod的区别:%出来的数有正有负,符号取决于左操作数。。。而mod只能是正 int mod(int nExp1,int nExp2);在math中。 算术右移是把二进制补码向右…

    数据结构和算法 2023年6月7日
    0140
  • 记一次 Druid 超时配置的问题 → 引发对 Druid 时间配置项的探究

    开心一刻 一天在路边看到一个街头采访 记者:请问,假如你儿子娶媳妇,给多少彩礼合适呢 大爷:一百万吧,再给一套房,一辆车 大爷沉思一下,继续说到:如果有能力的话再给老丈人配一辆车,…

    数据结构和算法 2023年6月7日
    0106
  • 深入C++04:模板编程

    📕模板编程 函数模板 模板意义:对类型也进行参数化; 函数模板:是不编译的,因为类型不知道 模板的实例化:函数调用点进行实例化,生成模板函数 模板函数:这才是要被编译器所编译的 函…

    数据结构和算法 2023年6月12日
    088
  • 堆排序及实现(C++)

    二叉堆数据结构,底层用数组实现,可理解为一棵完全二叉树。 性质:堆序性质,上浮下沉操作都是为了保持堆序性质。 堆可用来排序,求TopK问题等。 代码: 上述代码建堆方式为数组已知,…

    数据结构和算法 2023年6月8日
    091
  • Transformer模块初探

    Transformer笔记 前言背景 Transformer 依赖于 Self Attention &#x…

    数据结构和算法 2023年6月8日
    087
  • 2.1插入排序

    一、概述 1、适用场景:对少量元素进行排序,当元素数量较多时,插入排序的效率低 2、算法过程的描述:现有n个无序的数,依次将第1,2,3……n个数插入到有序…

    数据结构和算法 2023年6月8日
    086
  • LeetCode 593. 有效的正方形(向量做法)

    题意:给出二维平面上四个点的坐标,判断这四个点是否能构成一个正方形,四个点的输入顺序不做任何保证。 通过向量运算可以很轻松地解决这道题。任取一点向其他三点连线,可以得到三个向量。我…

    数据结构和算法 2023年6月8日
    0100
  • Netty 学习(五):服务端启动核心流程源码说明

    原文地址: 本文使用的 Netty 版本是 4.1.82.Final, io.netty netty-all 4.1.82.Final 服务端在启动的时候,主要流程有如下几个 我们…

    数据结构和算法 2023年6月12日
    060
  • 相机控制, 相机跟随

    实现的功能 (1) 滚轮拉近, 推远相机(带惯性) (2) 鼠标左键左右,上下转动相机(带惯性) (3) 相机跟随角色 待实现功能 (1) 转动相机时,如果相机和跟随角色间出现了障…

    数据结构和算法 2023年6月7日
    084
  • 随机算法入门:洗牌算法

    洗牌算法是什么? 其实就理解为生成一个随机数列的一个简单操作而已。 怎么生成? 我们先讲下一般我们会想到的一个解法——标记。 假设我们的数组为a,ai 代表数组a第i个数。 一个布…

    数据结构和算法 2023年6月7日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球