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

    你可能感兴趣的文章
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>
    NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
    查看>>
    NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
    查看>>
    Node JS: < 一> 初识Node JS
    查看>>
    Node-RED中使用JSON数据建立web网站
    查看>>
    Node-RED中使用json节点解析JSON数据
    查看>>
    Node-RED中使用node-random节点来实现随机数在折线图中显示
    查看>>
    Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
    查看>>
    Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>