广告
返回顶部
首页 > 资讯 > 前端开发 > html >javascript对象分为哪些类型
  • 130
分享到

javascript对象分为哪些类型

2024-04-02 19:04:59 130人浏览 独家记忆
摘要

这篇“javascript对象分为哪些类型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“j

这篇“javascript对象分为哪些类型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascript对象分为哪些类型”文章吧。

javascript的两类对象:1、宿主对象(host Objects),是由JavaScript宿主环境提供的对象,它们的行为完全由宿主环境决定;2、内置对象(Built-in Objects),是由JavaScript语言提供的对象。

教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

在javascript中,可以把对象分成两类宿主对象和内置对象。

  • 宿主对象(host Objects):由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。

  • 内置对象(Built-in Objects):由 JavaScript 语言提供的对象

    • 固有对象(Intrinsic Objects ):由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例。

    • 原生对象(Native Objects):可以由用户通过 Array、RegExp 等内置构造器或者特殊语法创建的对象。

    • 普通对象(Ordinary Objects):由{}语法、Object 构造器或者 class 关键字定义类创建的对象,它能够被原型继承。

宿主对象

JavaScript 宿主对象千奇百怪,但是前端最熟悉的无疑是浏览器环境中的宿主了。在浏览器环境中,我们都知道全局对象是 window,window 上又有很多属性,如 document。实际上,这个全局对象 window 上的属性,一部分来自 JavaScript 语言,一部分来自浏览器环境。JavaScript 标准中规定了全局对象属性,W3C 的各种标准中规定了 Window 对象的其它属性。宿主对象也分为固有的和用户可创建的两种,比如 document.createElement 就可以创建一些 DOM 对象。宿主也会提供一些构造器,比如我们可以使用 new Image 来创建 img 元素,

内置对象·固有对象

固有对象是由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例。固有对象在任何 JavaScript 代码执行前就已经被创建出来了,它们通常扮演者类似基础库的角色。我们前面提到的“类”其实就是固有对象的一种。ECMA 标准为我们提供了一份固有对象表,里面含有 150+ 个固有对象。

内置对象·原生对象

我们把 JavaScript 中,能够通过语言本身的构造器创建的对象称作原生对象。在 JavaScript 标准中,提供了 30 多个构造器。按照我的理解,按照不同应用场景,我把原生对象分成了以下几个种类。

javascript对象分为哪些类型
通过这些构造器,我们可以用 new 运算创建新的对象,所以我们把这些对象称作原生对象。几乎所有这些构造器的能力都是无法用纯 JavaScript 代码实现的,它们也无法用 class/extend 语法来继承。这些构造器创建的对象多数使用了私有字段, 例如:

Error: [[ErrorData]]
Boolean: [[BooleanData]]
Number: [[NumberData]]
Date: [[DateValue]]
RegExp: [[RegExpMatcher]]
Symbol: [[SymbolData]]
Map: [[MapData]]

这些字段使得原型继承方法无法正常工作,所以,我们可以认为,所有这些原生对象都是为了特定能力或者性能,而设计出来的“特权对象”。

用对象来模拟函数与构造器:函数对象与构造器对象

我在前面介绍了对象的一般分类,在 JavaScript 中,还有一个看待对象的不同视角,这就是用对象来模拟函数和构造器。事实上,JavaScript 为这一类对象预留了私有字段机制,并规定了抽象的函数对象与构造器对象的概念。

函数对象的定义是:具有[[call]]私有字段的对象,构造器对象的定义是:具有私有字段[[construct]]的对象。

JavaScript 用对象模拟函数的设计代替了一般编程语言中的函数,它们可以像其它语言的函数一样被调用、传参。任何宿主只要提供了“具有[[call]]私有字段的对象”,就可以被 JavaScript 函数调用语法支持。

我们可以这样说,任何对象只需要实现[[call]],它就是一个函数对象,可以去作为函数被调用。而如果它能实现[[construct]],它就是一个构造器对象,可以作为构造器被调用。

对于为 JavaScript 提供运行环境的程序员来说,只要字段符合,我们在上文中提到的宿主对象和内置对象(如 Symbol 函数)可以模拟函数和构造器。

当然了,用户用 function 关键字创建的函数必定同时是函数和构造器。不过,它们表现出来的行为效果却并不相同。

对于宿主和内置对象来说,它们实现[[call]](作为函数被调用)和[[construct]](作为构造器被调用)不总是一致的。

对于用户使用 function 语法或者 Function 构造器创建的对象来说,[[call]]和[[construct]]行为总是相似的,它们执行同一段代码。我们看一下示例。

function f(){
    return 1;
}
var v = f(); //把f作为函数调用
var o = new f(); //把f作为构造器调用

这样的规则造成了个有趣的现象,如果我们的构造器返回了一个新的对象,那么 new 创建的新对象就变成了一个构造函数之外完全无法访问的对象,这一定程度上可以实现“私有”。

function cls(){
    this.a = 100;
    return {
        getValue:() => this.a
    }
}
var o = new cls;
o.getValue(); //100
//a在外面永远无法访问到

特殊行为的对象

除了上面介绍的对象之外,在固有对象和原生对象中,有一些对象的行为跟正常对象有很大区别。

它们常见的下标运算(就是使用中括号或者点来做属性访问)或者设置原型跟普通对象不同,这里我简单总结一下。

  • Array:Array 的 length 属性根据最大的下标自动发生变化。

  • Object.prototype:作为所有正常对象的默认原型,不能再给它设置原型了。

  • String:为了支持下标运算,String 的正整数属性访问会去字符串里查找。

  • Arguments:arguments 的非负整数型下标属性跟对应的变量联动。

  • 模块的 namespace 对象:特殊的地方非常多,跟一般对象完全不一样,尽量只用于 import 吧。

  • 类型数组和数组缓冲区:跟内存块相关联,下标运算比较特殊。

  • bind 后的 function:跟原来的函数相关联。

以上就是关于“javascript对象分为哪些类型”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网html频道。

--结束END--

本文标题: javascript对象分为哪些类型

本文链接: https://www.lsjlt.com/news/89159.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javascript对象分为哪些类型
    这篇“javascript对象分为哪些类型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“j...
    99+
    2022-10-19
  • javascript对象类型有哪些
    这篇文章主要介绍“javascript对象类型有哪些”,在日常操作中,相信很多人在javascript对象类型有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”javasc...
    99+
    2022-10-19
  • JavaScript 中的错误对象类型有哪些
    这期内容当中小编将会给大家带来有关JavaScript 中的错误对象类型有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。属性Error 对象具有2个属性:(1) na...
    99+
    2022-10-19
  • java对象分配内存的类型有哪些
    这篇文章主要介绍了java对象分配内存的类型有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java对象分配内存的类型有哪些文章都会有所收获,下面我们一起来看看吧。1、两种类型(1)指针碰撞的分配方式用于在...
    99+
    2023-06-30
  • Python对象的类型有哪些
    Python中对象的类型分为可变对象和不可变对象两种可变对象Python中可变对象是指对象的内容可变,允许对自身内容进行修改,可变对象包括list、set、dict、自定义对象几种。不可变对象Python中不可变对象是指在保持对象不变的前提...
    99+
    2022-10-24
  • python中有哪些对象类型
    python中有哪些对象类型?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而...
    99+
    2023-06-14
  • JavaScript对象内置对象,值类型和引用类型讲解
    目录对象对象的定义遍历对象的成员JS内置对象Math对象Date对象数组对象String对象值类型和引用类型对象 JS中的对象是属性和行为的结合体,其中属性是对象的静态特征,行为又称...
    99+
    2022-11-12
  • SSL证书分为哪些类型
    SSL证书的类型有:1、域名验证类型,适合个人网站和博客等网站使用;2、企业验证类型,适合中型企业用户使用;3、扩展验证类型,适合高度信任的企业用户,如银行,电子商务平台等使用。具体内容如下:DV SSL证书(域名验证类型)仅验证域名,适合...
    99+
    2022-10-17
  • linux shell可分为哪些类型
    Linux shell可以分为以下几种类型:1. Bourne Shell(/bin/sh):最早的Unix shell,也是Lin...
    99+
    2023-08-25
    linux shell
  • linux指令分为哪些类型
    今天小编给大家分享一下linux指令分为哪些类型的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。linux指令可分为2类:1、...
    99+
    2023-06-30
  • JavaScript中怎么将对象转换为原始类型
    这篇文章将为大家详细讲解有关JavaScript中怎么将对象转换为原始类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。说明将原始类型的对象转换为内置的[ToPrimitive]函数。使用S...
    99+
    2023-06-20
  • 云服务器分为哪些类型
    云服务器的类型有:1、公共云服务器,按需提供云虚拟资源,并在许多用户共享的物理服务器集群中运行;2、私有云服务器,底层物理硬件是与单个客户打交道,单个客户享有整个私有云平台资源;3、混合云服务器,拥有更广泛的资源,企业可以充分利用各种基础设...
    99+
    2022-10-08
  • jquery选择器分为哪些类型
    这篇文章主要介绍“jquery选择器分为哪些类型”,在日常操作中,相信很多人在jquery选择器分为哪些类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jquery选择器分...
    99+
    2022-10-19
  • linux用户组分为哪些类型
    本文小编为大家详细介绍“linux用户组分为哪些类型”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux用户组分为哪些类型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2023-03-09
    linux
  • 什么是javascript的对象类型
    本篇内容介绍了“什么是javascript的对象类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • JavaScript如何使用对象作为对象的原型
    这篇文章主要为大家展示了“JavaScript如何使用对象作为对象的原型”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何使用对象作为对象的...
    99+
    2022-10-19
  • R语言基本对象类型有哪些
    这篇文章主要介绍了R语言基本对象类型有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本向量包含单类型对象(例如整数,浮点数,复数,文本,逻辑值或者原始型数据)的向量复合...
    99+
    2023-06-14
  • Javascript有哪些对象
    小编给大家分享一下Javascript有哪些对象,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript 对象Java...
    99+
    2022-10-19
  • jquery中选择器分为哪些类型
    这篇文章主要介绍了jquery中选择器分为哪些类型的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jquery中选择器分为哪些类型文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2022-10-19
  • html5中的列表分为哪些类型
    这篇文章主要介绍“html5中的列表分为哪些类型”,在日常操作中,相信很多人在html5中的列表分为哪些类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html5中的列表分...
    99+
    2022-10-19
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作