JS对象分类
一、构造函数
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的所有属性

2.2、Object.prototype是哪个函数构造出来的?
- 无,也没有原型
- 举例验证:

三、对象分类
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、自身属性
3.2.3、共有属性
终极一问
- window是谁构造出来的?Window
- window.constructor——>Window
window.__proto__===Window.prototype——>ture
- window.Object是谁构造出来的?window.Function
- window.Object是函数对象,所有函数都是由window.Function构造
- window.Object.constructor——>Function()
- window.Object.constructor===window.Function——>ture
- window.Function是谁构造出来的?window.Function
- 所有函数都是由window.Function构造
- window.Function.constructor===window.Function——>ture
- 浏览器构造Function,指定它的构造者是自己