面向对象的三大特点:封装 继承 多态
类
-
ES6 class 关键词定义类,必须通过new关键词来调用
-
ES5 构造函数+原型 模拟类
1>成员的属性和方法
2>原型的属性和方法
注:以上两种都是通过this或者是实例来调用,
如果调用的方法在成员方法和属性上能找到,直接调用,
成员方法上找不到,往原型对象上找,到最后都没找到,报xx is not a function
3>静态的属性和方法
必须通过类名调用
什么是构造函数?
通过new关键词调用的函数,就是构造函数
在new调用函数的过程中发生了什么?
- 新生成了一个对象
- 链接到原型
- 绑定 this
- 返回新对象
function create() {
//1.创建一个新对象
let obj = {}
//2.获取构造函数
let Con = arguments[0]
//3.把构造函数的原型对象赋值给obj
obj.__proto__ = Con.prototype
//4.把构造函数内部的this指向obj
let result = Con.apply(obj, arguments)
return obj
}
create(Person);
原型链是什么?
通过对象的__proto__属性一直往上查找,直到null,这个链就叫原型链
使用原型链的好处是什么?
减少方法和属性的创建,节省内存