构造函数

  1. 定义:可以构造出对象的函数

new X() 自动做了四件事

1、自动创建空对象
2、自动为空对象关联原型,原型地址指定为X.prototype(把这个对象指向原型)
3、自动将空对象作为this关键字运行构造函数
4、自动return this

构造函数 X

X 函数本身负责给对象本身添加属性
X.prototype 对象负责保存对象的共有属性
一个结论:
你是谁构造的,你的原型就是谁的prototype属性(prototype这个地址), 对应的对象

原型公式:

对象. proto === 其构造函数.prototype

对象需要分类

理由一:有很多对象拥有一样的属性和行为
需要把他们分为一类
这样创建类似对象的时候就很方便
理由二:还有许多对象拥有其他的属性和行为
所以需要不同的分类
Array/Function也是不同的分类
而Object创建出来的对象,是最没有特点的对象

类型VS类

类型:JS的数据的分类 string、number、bool、symbol、undefined、null、object
类:针对对象的分类,常见的有Array、Function、Date、RegExp等

数组对象:

定义一个数组
let arr = [1,2,3]
let arr = new Array(1,2,3) //元素为1,2,3
let arr = new Array(3) //长度为3
数组对象自身属性
属性名和length
属性名没有数字,只有字符串
数组对象的共用属性
‘push’ / ‘pop’ / ‘shift’ / ‘unshift’ / ‘join’ /

函数对象

定义一个函数
function fn(x,y){return x+y}
let fn2 = function(x,y){return x+y}
let fn = (x,y) => x+y
let fn = new Function(‘x’,’y’, ‘return x +y’)
函数对象自身属性
‘name’ / ‘length’
函数对象共用属性
‘call’ / ‘apply’ / ‘bind’

JS终极一问

window是谁构造的
可通过constructor属性看出构造者是Window
window.Object是谁构造的
window.Function 因为所有函数都是window.Function构造的
window.Function是谁构造的
window.Function 浏览器构造了Function,然后指定它的构造者是它自己