定义
把相同的特征的代码归为一类,把描述细节挂在这个类的原型下的一种编程思想。
把封装函数的思想叫成抽象
封装函数:====>相同的代码拿一个函数包起来,复用
把函数变成对象的一种编程思想
类:->把相同的特征的代码归为一类 (封装函数)
类的首字母要大写
类中尽量把变量变成属性。
抽象:(抽离,长得像)
-> 抽出像的部分
1  | function Person(Pname,Page){ //类  | 
new
函数运算符
对象只有  proto
函数有   prototype    proto
- 加不加括号都会运行函数,只不过加括号是为了传参
 - 构造函数中的this指向它的实例化对象
 - 默认返回构造函数的实例化对象
 - 如果强行给它加上return,如果是简单类型的数据
返回值还是构造函数的实例化对象 如果是复合类型,就返回介个复合类型。 
prototype(原型)
当创建一个函数的时候,自身带的属性
 这个属性的值为对象 
如果一个对象上没有某个属性或者方法,那么还会继续
去这个对象的构造函数的原型下去找某个属性或者方法。
proto(原型链)
对象身上才有原型链(包括函数)
实例化对象的原型链 === 构造函数的原型
构造函数的原型下的属性或者方法,只给它的实例化对象用
1  | function Person(name,age){  | 
Function
- Function是Function构造出来的
 - Object也是Function构造出来的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.say = function(){
alert(1);
}
Function.prototype.say = function(){
alert(3);
}
Object.prototype.say = function(){
alert(4);
}
Function.say = function(){
alert(5);
}
Person.say = function(){
alert(2);
}
let p = new Person();
p.say();
Person.say();
Function.say();
Object.say(); 
结论
 p.say
   1、p.say
   2、Person.prototype.say
   3、Object.prototype.say
 Person.say
   1、Person.say
   2、Person.__proto__ -> Function.prototype
   3、Object.prototype.say
Function.say
   1、Function.say
   2、Function.__proto__ -> Function.prototype
   3、Object.prototype.say
Object.say
    1、Object.say
    2、Object.__proto__ -> Function.prototype
    3、Object.prototype.say