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

    你可能感兴趣的文章
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>
    mysql5.7免费下载地址
    查看>>
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>