JS对象分类

94 阅读2分钟

一、构造函数

1、前提认知

  • 可以构造出对象的函数
  • 函数自带prototype,用来装共有属性
  • prototype里有constructor,此为函数本身,function f1(){},则f1.prototype.constructor===f1,为ture

2、new

2.1、new X()自动做了四件事
  • 自动创建空对象
  • 自动为空对象关联原型,原型地址指定为X.prototype
  • 自动将空对象作为this关键字运行构造函数
  • 自动return this
2.2、构造函数X
  • X函数本身负责给对象本身添加属性
  • X.prototype对象负责保存对象的共用属性

3、代码规范

3.1、大小写
  • 所有构造函数首字母大写,function Person(name){}
  • 所有构造出来的对象,首字母小写,let person=new Person('frank')
3.2、词性
  • new后面的函数使用名词形式,new Person()
  • 其他函数,一般使用动词开头,createSquare(5)

二、原型公式

1、公式:对象.__proto__===其构造函数.prototype

2、eg

2.1、let x={}
  • x的原型是?x.__proto__
  • x.__proto__的值是?Object.prototype
  • 以上两个问题等价吗?等价,因为x.__proto__===Object.prototype
  • 用内存图画出x的所有属性 微信图片_20230309163222.jpg
2.2、Object.prototype是哪个函数构造出来的?
  • 无,也没有原型
  • 举例验证: 微信图片_20230310112336.png

三、对象分类

1、对象需要分类

  • 很多对象拥有一样的属性和行为,需要分为同一类,如square1和square2
  • 再创建类似对象时就很方便
  • 还有很多对象拥有其他的属性和行为,需要不同的分类,如square和circle
  • Array/Function也是不同的分类
  • Object创建出来的对象是最没有特点的对象

2、类型和类

  • 类型:JS数据类型,四基两空一对象,string、bool、number、symbol、null、undefined、object
  • 类:对象的再分类,有无数种

3、最有特点的对象

3.1、数组对象
3.1.1、定义
  • let arr=new Array(1,2,3),元素为1,2,3
  • let arr=new Array(3),长度为3
  • let arr=[1,2,3],简写
3.1.2、自身属性
  • '0'/'1'/'2'/'length',这是属性名,都是字符串
3.1.3、共有属性
  • 'push',加入一个/几个元素,arr.push(8)——>[1,2,3,8]/arr.push(8,9,7)——>[1,2,3,8,9,7]
  • 'pop',减少一个元素,arr.pop(100)——>[1,2,3]
  • 'shift',从头减少一个元素,arr.shift(9)——>[2,3]
  • 'unshift',从头加入一个/几个元素,arr.unshift(100)——>[100,2,3]/arr.unshift(100,200,300)——>[100,200,300,2,3]
  • 'join',将各元素连接起来,arr.join(hi)——>100hi2hi3
3.1.4、prototype
  • 数组对象有两层prototype
  • 第一层装push、pop、shift等
  • 第二层装toString、valueOf等
3.2、函数对象
3.2.1、定义
  • let fn=new Function('x','y','return x+y')
  • function fn(x,y){return x+y}
  • let fn2=function fn(x,y){return x+y}
  • let fn=(x,y)=>x+y
3.2.2、自身属性
  • 'name'/'length'
3.2.3、共有属性
  • 'call'/'apply'/'bind'

终极一问

  1. window是谁构造出来的?Window
  • window.constructor——>Window
  • window.__proto__===Window.prototype——>ture
  1. window.Object是谁构造出来的?window.Function
  • window.Object是函数对象,所有函数都是由window.Function构造
  • window.Object.constructor——>Function()
  • window.Object.constructor===window.Function——>ture
  1. window.Function是谁构造出来的?window.Function
  • 所有函数都是由window.Function构造
  • window.Function.constructor===window.Function——>ture
  • 浏览器构造Function,指定它的构造者是自己