博客
关于我
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/

    你可能感兴趣的文章
    mppt算法详解-ChatGPT4o作答
    查看>>
    mpvue的使用(一)必要的开发环境
    查看>>
    MQ 重复消费如何解决?
    查看>>
    mqtt broker服务端
    查看>>
    MQTT 保留消息
    查看>>
    MQTT 持久会话与 Clean Session 详解
    查看>>
    MQTT介绍及与其他协议的比较
    查看>>
    MQTT工作笔记0007---剩余长度
    查看>>
    MQTT工作笔记0008---服务质量
    查看>>
    MQTT工作笔记0009---订阅主题和订阅确认
    查看>>
    Mqtt搭建代理服务器进行通信-浅析
    查看>>
    MS COCO数据集介绍
    查看>>
    MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
    查看>>
    ms sql server 2008 sp2更新异常
    查看>>
    MS SQL查询库、表、列数据结构信息汇总
    查看>>
    MS UC 2013-0-Prepare Tool
    查看>>
    MSBuild 教程(2)
    查看>>
    msbuild发布web应用程序
    查看>>
    MSB与LSB
    查看>>
    MSCRM调用外部JS文件
    查看>>