博客
关于我
9 # JavaScript中的对象分类
阅读量:559 次
发布时间:2019-03-09

本文共 2081 字,大约阅读时间需要 6 分钟。

说明

每天10分钟,重构你的前端知识体系专栏笔记。


一、JavaScript对象分类介绍

1.0 宿主对象(Host Objects)

宿主对象是由JavaScript宿主环境提供的对象,其行为由宿主环境决定,不受JavaScript引擎控制。

1.1 内置对象(Built-in Objects)

内置对象是JavaScript语言提供的对象,其行为由JavaScript引擎控制。

1.1.0 固有对象(Intrinsic Objects)

固有对象由ECMA标准规定且随着JavaScript引擎运行生成,用于解释和支持JavaScript运行时的基础服务。

1.1.1 原生对象(Native Objects)

原生对象可以通过内置构造器如ArrayRegExp创建,行为由宿主环境决定。

1.1.2 普通对象(Ordinary Objects)

普通对象通过{}语法、Object构造器或class关键字定义,支持原型继承。

2.0 宿主对象

2.0.1 window对象

window是JavaScript的全局对象,包含浏览器提供的API,如window.openwindow.location等。

三、内置对象·固有对象

3.0 固有对象简介

固有对象在代码执行前即由JavaScript引擎创建,起着类似基础库的作用。

3.1 获取固有对象

通过使用ReflectObject.defineProperty等方法可获取固有对象的属性,常用采用广度优先搜索方式收集所有对象和构造器。

3.1.0 三个固定值
  • Infinity
  • NaN
  • undefined
3.1.1 九个函数
  • eval
  • isFinite
  • isNaN
  • parseFloat
  • parseInt
  • decodeURI
  • decodeURIComponent
  • encodeURI
  • encodeURIComponent
3.1.2 一些构造器
  • Array
  • Date
  • RegExp
  • Promise
  • Proxy
  • Map
  • WeakMap
  • Set
  • WeakSet
  • Function
  • Boolean
  • String
  • Number
  • Symbol
  • Object
  • Error
  • EvalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError
  • ArrayBuffer
  • SharedArrayBuffer
  • DataView
  • Typed Array
  • Float32Array
  • Float64Array
  • Int8Array
  • Int16Array
  • Int32Array
  • Uint8Array
  • Uint16Array
  • Uint32Array
  • Uint8ClampedArray
  • Atomics
  • JSON
  • Math
  • Reflect
3.1.3 四个命名空间对象
  • Atomics
  • JSON
  • Math
  • Reflect
3.1.4 处理方法
  • 通过爬取Object.getOwnPropertyNames获取对象属性,分析每个属性的GetterSetter,收集所有固有对象。

四、内置对象·原生对象

4.0 原生对象分类

原生对象根据应用场景分类如下:

  • 构造器对象:通过new创建,不能用函数调用方式。
  • 函数对象:通过Function构造器或function语法创建。
  • 特权对象:如Error,内部结构无法通过原型继承访问。

4.1 注意事项

  • 原生对象多功能化,无法用纯JavaScript构造,且无扩展性。
  • 原生对象通过new创建,不能用函数调用,避免使用class扩展。
  • 原生对象内部使用私有字段,如[[ErrorData]],不支持原型继承。

五、用对象模拟函数与构造器

5.0 函数对象定义

函数对象具有[[call]]私有字段,用于接受this和参数并执行。

5.1 构造器对象定义

构造器对象具有[[construct]]私有字段,用于创建对象实例。

5.1.0 构造器执行流程
  • Object.prototype为原型创建新对象。
  • 执行构造器[[construct]],用新对象作为this
  • [[construct]]返回对象则用返回值,否则返回初始新对象。
  • 5.1.1 示例
    • Date作为构造器创建新对象,作为函数返回字符串。
    • Image构造器需用new,否则报错。
    • 基本类型的构造器如String等返回转换结果。

    5.2 示例

  • new Date创建日期对象,Date()返回字符串。
  • Image构造器需用new,不能直接调用。
  • 基于class的函数不能作为构造器。
  • 创建闭包对象,属性不可外部访问。
  • 六、特殊行为的对象

  • Array:动态管理length属性。
  • String:属性访问无关下标即字符串内容。
  • Arguments:与函数实际参数对应。
  • Namespace对象:仅在import时使用。
  • 类型数组和缓冲区:与内存相关。
  • 绑定函数:与原函数相关联。
  • 通过以上分类,我们可以更清晰地理解JavaScript对象系统的结构与用法。

    转载地址:http://jihiz.baihongyu.com/

    你可能感兴趣的文章
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>
    NetworkX:是否为每个节点添加超链接?
    查看>>
    network小学习
    查看>>
    Netwox网络工具使用详解
    查看>>
    Net与Flex入门
    查看>>
    Net任意String格式转换为DateTime类型
    查看>>
    net包之IPConn
    查看>>
    net发布的dll方法和类显示注释信息(字段说明信息)[图解]
    查看>>
    Net和T-sql中的日期函数操作
    查看>>
    Net处理html页面元素工具类(HtmlAgilityPack.dll)的使用
    查看>>
    Net操作Excel(终极方法NPOI)
    查看>>
    Net操作配置文件(Web.config|App.config)通用类
    查看>>
    net网络查看其参数state_dict,data,named_parameters
    查看>>
    Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载
    查看>>
    NeurIPS(神经信息处理系统大会)-ChatGPT4o作答
    查看>>
    neuroph轻量级神经网络框架
    查看>>
    Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
    查看>>
    new Blob()实现不同类型的文件下载功能
    查看>>
    New Concept English three (35)
    查看>>
    NEW DATE()之参数传递
    查看>>