zoukankan      html  css  js  c++  java
  • JavaScript 对象 Object

    Javascript对象机制

    Object

    • 任何一个对象都是唯一的,这个与它本身的状态并不相关。
    • 即使完全一致的两个对象,也会完全不相等。
    • 我们用状态来描述一个对象。
    • 状态的改变即是行为。
    • 标志性(identifier 我叫做表示或者声明)指针(state)行为(behavior)

    写到这里的时候,突然想起来个事情,在 winter 老师的课程里面,我们描述一个对象的各个行为的时候,定义object.function 一定要去改变这个 state,就是说function 的起名,也要跟 state 有关,而不是去定义一个动作,而是定义动作改变了状态。

    抽象对象时,应该遵循‘行为改变状态’的原则,行为改变自身状态。不应该按照语言描述的行为进行设计。

    基于类的面向对象

    • 类是一种常见的描述对象的方式。而“归类”和“分类”则是两个主要的流派。
    • 对于“归类”方法而言,多继承是非常自然的事情。如C++。(多继承太绕了,但是单继承好,在我看来….这里不引战争)。
    • 而采用分类思想的计算机语言,则是单继承结构。并且会有一个基类Object。
    • 原型是一种更接近人类原始认知的描述对象的方法。
    • 我们并不试图做严谨的分类,而是采用“相似”这样的方式去描述对象。
    • 任何对象仅仅需要描述它自己与原型的区别即可。
    Object API
    • 基础API

      {} . [] Object.defineProperty

    • 原型API

      Object.create Object.setPrototypeOf Object.getPrototypeOf

    • 基于类的面向对象API(模拟)

      new class extends

    • 基于原型的面向对象API

      new function prototype

    Object in Javascript

    • 在Javascript运行时,原生对象的描述方式非常简单。我们只需要关心原型和属性两个部分。

    • 它的原型实际上就是一个KV对。

    • Javascript用属性来统一抽象对象状态和行为。

    • 一般来说,数据属性用于描述状态,访问器属性则用于描述行为。

    • 数据属性中如果存储函数,也可以用于描述行为。

    JavaScript 中的对象

    基本对象

    基本对象是定义或使用其他对象的基础。基本对象包括一般对象、函数对象和错误对象。

    一般对象、函数对象
    • Object
    • Function
    • Boolean
    • Symbol
    错误对象

    错误对象是一种特殊的基本对象。它们拥有基本的 Error 类型,同时也有多种具体的错误类型。

    • Error(通过Error的构造器可以创建一个错误对象。当运行时错误产生时,Error的实例对象会被抛出。Error对象也可用于用户自定义的异常的基础对象。)

      new Error([message[, fileName[,lineNumber]]]) 
      
    • AggregateError

    • EvalError

    • RangeError(标明一个错误,当一个值不在其所允许的范围或者集合中。)

    • ReferenceError(代表当一个不存在的变量被引用时发生的错误。)

    • SyntaxError(对象代表尝试解析语法上不合法的代码的错误。)

    • TypeError(对象用来表示值的类型非预期类型时发生的错误。

    语法)

    • URLError(URIError 对象用来表示以一种错误的方式使用全局URI处理函数而产生的错误。)

    数字和日期对象

    用来表示数字、日期和执行数学计算的对象。

    • Number
    • BigInt(它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。)
    • Math
    • Date

    字符串

    用来表示和操作字符串的对象。

    • String
    • RegExp

    可索引的集合对象

    表示按照索引值来排序的数据集合,包括数组和类型数组,以及类数组结构的对象。

    • Array
    • Int8Array(表示二进制补码8位有符号整数的数组。内容初始化为0。 一旦建立,你可以使用对象的方法引用数组中的元素,或使用标准数组索引语法( 即,使用括号注释)。)
    • Uint8Array(表示一个8位无符号整型数组,创建时内容被初始化为0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。)
    • Uint8ClampedArray((8位无符号整型固定数组) 类型化数组表示一个由值固定在0-255区间的8位无符号整型组成的数组;如果你指定一个在 [0,255] 区间外的值,它将被替换为0或255;如果你指定一个非整数,那么它将被设置为最接近它的整数。(数组)内容被初始化为0。一旦(数组)被创建,你可以使用对象的方法引用数组里的元素,或使用标准的数组索引语法(即使用方括号标记)。)
    • Int16Array
    • Uint16Array
    • Int32Array
    • Uint32Array
    • Float32Array
    • Float64Array
    • BigInt64Array
    • BigUint64Array

    使用键的集合对象

    这些集合对象在存储数据时会使用到键,包括可迭代的Map 和 Set,支持按照插入顺序来迭代元素。

    • Map
    • Set
    • WeakMap(一组键/值对的集合,其中的键是弱引用的。)
    • WeakSet(对象允许你将弱保持对象存储在一个集合中。)

    结构化诗句

    这些对象用来表示和操作结构化的缓冲区数据,或使用 JSON (JavaScript Object Notation)编码的数据。

    • ArrayBuffer(表示通用的、固定长度的原始二进制数据缓冲区。它是一个字节数组,你不能直接操作 ArrayBuffer 的内容,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。)
    • DataView(视图是一个可以从 二进制ArrayBuffer 对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。)
    • JSON

    控制抽象对象

    • Promise
    • Generator
    • GeneratorFunction
    • AsyncFunction
    • Iterator
    • AsyncIterator

    反射

    • Reflect(它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers的方法相同。Reflect不是一个函数对象,因此它是不可构造的。)
    • Proxy(用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等))

    js中特殊的对象

    • Function Object

      • [[call]] 视为函数Function
      • [[Construct]] 可以被new 操作符调用,根据new的规则返回对象。
    • Array Object

      • [[DefineOwnProperty]]

        • Property == length

          设置对象的length属性,根据length的变化对对象进行操作

          newLength > length 用空扩充数组

          newLength < length 截取数组

    • String Object

      string的length是不可写不可配的。

    • Arguments Object

      [[callee]] 视为函数参数对对象,伪数组 caller

    • Object

      [[Get]] property被访问时调用 get

      [[Set]] property被赋值时调用 set

      [[GetPrototypeOf]] 对应getPrototypeOf方法 获取对象原型

      [[SetPrototypeOf]] 对应setPrototypeOf方法 设置对象原型

      [[GetOwnProperty]] getOwnPropertyDescriptor 获取对象私有属性的描述列表

      [[HasProperty]] hasOwnProperty 私有属性判断

      [[IsExtensible]] isExtensible对象是否可扩展

      [[PreventExtensions]] preventExtension控制对象是否可以添加属性

      [[DefineOwnProperty]] defineProperty 定义对象属性

      [[Delete]] delete 操作符

      [[OwnPropertyKeys]] Object.keys() Object.entries() Object.values()

      [[Call]] 能够调用call

    • Module Namespece

      [[Module]] 视为一个引入的模块

      [[Exports]] 视为一个导出的模块

  • 相关阅读:
    Alpha阶段敏捷冲刺③
    Alpha阶段敏捷冲刺②
    Alpha阶段敏捷冲刺①Scrum 冲刺博客
    201621123031 《Java程序设计》第8周学习总结
    201621123031 《Java程序设计》第7周学习总结
    201621123031 《Java程序设计》第6周学习总结
    201621123031 《Java程序设计》第5周学习总结
    201621123031 《Java程序设计》第4周学习总结
    201621123031 《Java程序设计》第3周学习总结
    201621123031 《Java程序设计》第2周学习总结
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13094024.html
Copyright © 2011-2022 走看看