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

    你可能感兴趣的文章
    MySQL的主从复制云栖社区_mysql 主从复制配置
    查看>>
    mysql的优化策略有哪些
    查看>>
    MySQL的使用
    查看>>
    mysql的全文检索的方法
    查看>>
    mysql的函数DATE_ADD()
    查看>>
    mysql的函数操作
    查看>>
    Mysql的分表设计方法 (水平分表和垂直分表)
    查看>>
    mysql的分页查询limit关键字
    查看>>
    MySql的创建数据表、约束、外键约束的创建修改删除、级联操作
    查看>>
    MySQL的四大隔离级别,你都知道哪些?
    查看>>
    MySQL的四种事务隔离级别
    查看>>
    MySQL的基本命令
    查看>>
    Mysql的备份与恢复类型
    查看>>
    mysql的密码管理、mysql初始密码查找、密码修改、mysql登录
    查看>>
    mysql的常见八股文面试题
    查看>>
    MySQL的常见命令
    查看>>
    mysql的引擎以及优缺点_MySQL有哪些存储引擎,各自的优缺点,应用场景-阿里云开发者社区...
    查看>>
    MySQL的操作:
    查看>>
    mysql的数据类型有哪些?
    查看>>
    mysql的语法规范
    查看>>