本文共 2081 字,大约阅读时间需要 6 分钟。
每天10分钟,重构你的前端知识体系专栏笔记。
宿主对象是由JavaScript宿主环境提供的对象,其行为由宿主环境决定,不受JavaScript引擎控制。
内置对象是JavaScript语言提供的对象,其行为由JavaScript引擎控制。
固有对象由ECMA标准规定且随着JavaScript引擎运行生成,用于解释和支持JavaScript运行时的基础服务。
原生对象可以通过内置构造器如Array
、RegExp
创建,行为由宿主环境决定。
普通对象通过{}
语法、Object
构造器或class
关键字定义,支持原型继承。
window
是JavaScript的全局对象,包含浏览器提供的API,如window.open
、window.location
等。
固有对象在代码执行前即由JavaScript引擎创建,起着类似基础库的作用。
通过使用Reflect
、Object.defineProperty
等方法可获取固有对象的属性,常用采用广度优先搜索方式收集所有对象和构造器。
Infinity
NaN
undefined
eval
isFinite
isNaN
parseFloat
parseInt
decodeURI
decodeURIComponent
encodeURI
encodeURIComponent
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
Atomics
JSON
Math
Reflect
Object.getOwnPropertyNames
获取对象属性,分析每个属性的Getter
和Setter
,收集所有固有对象。原生对象根据应用场景分类如下:
new
创建,不能用函数调用方式。Function
构造器或function
语法创建。Error
,内部结构无法通过原型继承访问。new
创建,不能用函数调用,避免使用class
扩展。[[ErrorData]]
,不支持原型继承。函数对象具有[[call]]
私有字段,用于接受this
和参数并执行。
构造器对象具有[[construct]]
私有字段,用于创建对象实例。
Object.prototype
为原型创建新对象。[[construct]]
,用新对象作为this
。[[construct]]
返回对象则用返回值,否则返回初始新对象。Date
作为构造器创建新对象,作为函数返回字符串。Image
构造器需用new
,否则报错。String
等返回转换结果。new Date
创建日期对象,Date()
返回字符串。Image
构造器需用new
,不能直接调用。class
的函数不能作为构造器。length
属性。import
时使用。通过以上分类,我们可以更清晰地理解JavaScript对象系统的结构与用法。
转载地址:http://jihiz.baihongyu.com/