前端问题清单——JavaScript可以分为哪几类对象?

141 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

JavaScript是面向对象的语言。JavaScript的对象根据生成的环境/运行时可以分为两类:

宿主对象

JavaScript宿主环境提供的对象,行为完全由宿主环境决定。

宿主对象进一步分为环境本身自带的对象,和用户创建的对象。

关于宿主环境自带的对象

如果JavaScript运行在Web浏览器,那么宿主环境就是浏览器环境。浏览器环境提供了window这个全局对象,程序中就可以使用window对象。documentwindow的属性,在程序中也可以使用document这个属性。如果JavaScript运行在Node中,在程序在运行时涉及到windowNode会报window没有定义的错误。

关于在宿主环境中用户创建的对象

如果JavaScript运行在web浏览器,程序中可以使用内置于浏览器的API创建对象。

常见的浏览器API包括但不限于:

DOMAPI:可以操作HTMLCSS,创建、移除或者修改HTML

XMLHttpRequestFetchAPI:可以从服务器获取数据。

CanvasWebGL:可以绘制和操作图形

以及一些图片音视频API

内置对象

关于内置对象这个词,在JavaScript的装箱和拆箱转换里也提到过,这里详细介绍内置对象。

内置对象可以分为三种,一是在JavaScript运行时自动创建的对象,二是用户通过JavaScript内置的构造器创建的对象,三就是用户通过{}Object构造器、class定义类创建的对象。

关于JavaScript运行时自动创建的对象

这些对象在执行JavaScript代码前就被创建出来了,比如“类”。可以简单理解一下:比如代码执行class关键词前,就有一个基类,class新创建的对象继承了这个基类。

关于使用内置的构造器创建的对象

JavaScript内置的构造器有很多:

常见的构造器包括但不限于:

BooleanNumberStringSymbolObjectFunctionArrayMapSetDateRegExpPromise

使用new运算符,可以生成构造器对应的对象。

这类对象不能被原型继承,有特殊的能力或者性能。

比如new Array生成的数组实例,有length属性,支持下标访问,连续存储等特点。

比如new RegExp生成的正则实例,实现正则匹配的功能。

用户自定义创建的对象

let obj = {} 是一个对象
let obj = Object.create(null) 是一个对象
class o {
    constructor(){
        this.str = ''
    }
}
let obj = new o() 也是对象

这类对象能够被原型继承,也是代码中最常见的对象。

总结

JavaScript的对象既简单又复杂,希望看完本文的你对JavaScript的对象有更多的了解。