作家
登录

从Chrome源码看JS Object的实现

作者: 来源: 2017-04-06 11:42:17 阅读 我要评论

  • 0x21528af9cb39: [Map]  
  • – type: JS_OBJECT_TYPE  
  • – instance size: 48  
  • – inobject properties: 3  
  • – back pointer: 0x3e2ca8902311  
  • – instance descriptors (own) #0: 0x3e2ca8902231  
  • 大年夜第4行加粗字体可以看到,它的大年夜小确切和我们算的一样。并且它还有一个叫做descriptors表示它的数据构造。descriptor记录了每个key-value对,以及它们在FixedArray琅绫擎的index. 后续对properties的操作根本上经由过程descriptor进行。

    1. Handle boilerplate =  
    2. isolate->factory()->NewJSObjectFromMap(map, pretenure_flag); 

    从新开辟一段内存,把map的内容拷以前。

    1. for (int index = 0; index < length; index += 2) { 
    2.   Handle<Object> key(constant_properties->get(index + 0)); 
    3.   Handle<Object> value(constant_properties->get(index + 1)); 
    4.   Handle<String> name = Handle<String>::cast(key); 
    5.   JSObject::SetOwnPropertyIgnoreAttributes(boilerplate, name
    6.                                           value, NONE); 

    经由过程膳绫擎的代码,把properties设置到map的FixedArray琅绫擎,并且可以经由过程index用descriptors敏捷地掏出key-value。因为这个过程比较复杂,细节不展开评论辩论。

    在设置properties的同时,会初始化一个searchCache,这个cache支撑哈希查找某个属性。

    4. 字符串哈希查找

    在设置cache的时刻,会先辈行查找是否已存在雷同的属性名,如不雅已经有了就把它的value值覆盖掉落,不然把它添加到cache琅绫擎:

    1. int DescriptorArray::SearchWithCache(Isolate* isolate, Namename, Map* map) { 
    2.   DescriptorLookupCache* cache = isolate->descriptor_lookup_cache(); 
    3.   //找到它的index 
    4.   int number = cache->Lookup(map, name); 
    5.   //如不雅没有的话 
    6.   if (number == DescriptorLookupCache::kAbsent) { 
    7.     //经由过程遍历找到它的index 
    8.     number = Search(name, number_of_own_descriptors); 
    9.     //更新cache 
    10.     cache->Update(map, name, number); 
    11.   } 
    12.   return number; 

    如上代码的注释,我们先来看一下这个Search函数是怎么进行的:

    1. template <SearchModesearch_mode, typename T> 

        推荐阅读

        为什么要学习R语言

      示例2 词频分析及词云 R的出生效不雅展示1992年, 肉丝 (Ross Ihaka)和 萝卜特 (Robert Gentleman)两小我在S说话(贝尔实验室开辟的一种统计用编程说话)的基本上开端构思一种新的用于统计学>>>详细阅读


      本文标题:从Chrome源码看JS Object的实现

      地址:http://www.17bianji.com/lsqh/34594.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)