美文网首页让前端飞程序员
深入javascript引擎(2)

深入javascript引擎(2)

作者: zidea | 来源:发表于2019-01-24 04:28 被阅读17次

    定义一个对象 object,然后获取 object 的 x 属性值来做一些事情。例如打印。

    我们创建对象每一个属性都有 property attribute 描述这个属性,这些属性我们在用 Object.defineProperty 定义一个对象属性已经用到过。 ECMAScript 规范基本上将所有对象定义为由字符串键值映射到 property 属性 的字典。

    1. value 任意数据类型对象属性的默认值,默认值为undefined

    2. writable 为布尔型,对象属性是否可修改,flase为不可修改,默认值为true。

    3. enumerable 为布尔型,对象属性是否可通过for-in循环,flase为不可循环,默认值为true

    4. configurable 也是布尔型,能否使用delete、能否需改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true。

    以上就是我们创建一个对象时,JavaScript 引擎所做的事。

    我们知道在 javascript 语言,几乎所有集合类型都用数组来实现,我们可以用数组实现 map、hashmap、set 等。当然现在 es6 中我们不用再自己造轮子。es6 为我们提供除了数组意外更多集合选择。

    其实集合本质,在 JavaScript 引擎中也是以对象形式保存在内存中的。多了一个 length 属性,他是数组特有的一个属性,包括数组的长度。大家可以注意一下他属性值。其他就是键对象。

    每当我们为数组新增一个元素时,这里添加属性到这个数组对象,键为 1 值为图中所示,然后自增一下 length。

    我们在定义一个对象时,由于在 JavaScript 基本上算是没有类的概念,即使在 es6 新增 class 或是在 typescript 都为我们准备好类个关键字供我们使用,不过他还是基于 function,而不是真正意义上的 class。也没有必要。

    既然没有 class 的概念,所以我们用 object 来直接定义数据结构。不同对象具有相同数据结构,我们就可以将他们看成一类,或者是同一类的数据结构。

    我们一定对象,上面已经介绍了 object 在 JavaScript 引擎中是如何创建的。

    当我们创建了一个 object 在 JavaScript 将他结构用 shape 来表示,这样 shape 是可以复用,当我们创建一个具有相同数据结构的 object 就可以复用这个 shape ,object 无需考虑结构,和属性的定义,只是持有 object 对应属性的值就可以,这样可以减少内存开销。

    当我们再次创建一个具有相同数据结构,有就是具有相同 shape 的对象时,我们可以共享 shape ,如下图

    相关文章

      网友评论

        本文标题:深入javascript引擎(2)

        本文链接:https://www.haomeiwen.com/subject/qicsrqtx.html