1 new的作用
- 代码对比
1.1 new X() 的作用
-
自动创建空对象;
-
自动为空对象关联原型,原型地址指定为X.prototype;
-
自动将空对象作为this关键字运行构建函数;
-
自动return this;
1.2 构造函数 X
-
构造函数就是可以构造出对象的函数;
-
X 函数本身负责给对象本身添加属性;
-
X.prototype 对象负责保存对象的共用属性;
2 代码规范
2.1 大小写
-
所有构造函数(专门用于创建对象的函数)首字母大写
-
所有被构造出来的对象,首字母小写
2.2 词性
-
new 后面的函数,使用名词形式,如 new Person()、new Object()
-
其他函数,一般使用动词开头,如 createSquare(5)、createElement('div')
3 原型
3.1 原型公式
对象.__proto__ === 其构造函数.prototype;
例如:obj.__proto__ === Object.prototype
3.2 prototype 与 proto 的区别
-
所有函数一出生就有一个prototype属性(除了箭头函数);
-
所有prototype一出生就有一个constructor属性;
-
所有constructor属性一出生就保存了对应的函数的地址;
-
如果一个对象不是函数,那么这个对象一般来说没有prototype属性,但这个对象一般一定有__proto__属性;
-
Object.prototype.__proto__是null;
-
X的原型等价于 X.__proto__所指的对象,为了方便,可以认为 X的原型等价于X.__proto__但是,X的原型不等于 X.prototype ;
4 对象的分类
4.1 类型 VS 类
-
类型:是JS数据的分类,有7种,四基两空一对象;
-
类:是针对于对象的分类,有无数种,常见的有:Array、Function、Date等;
-
数组对象
- 函数对象
4.2 window、window.Object、window.Function
- window.Object是一个函数对象
5 class构造对象
5.1 class 中第一种函数写法
- 方法挂在原型上,一般不在这个语法里使用箭头函数
class Person{
say(name){}
等价于
function Person(){}
Person.prototype.say = function(name){}
- width = 0 的意思是width的默认值为0;
5.2 class中第二种函数写法
- 一般不在这个语法里使用普通函数
class Person{
say = (name)=>{}
等价于
function Person(){
this.say = (name)=>{}
}