1、基本概念
                所谓的面向对象编程,是一种编程思想和书写方式方法
                简单理解:
                    之前是将程序,封装在函数内,设定参数和返回值
                    现在是将程序,封装在对象内,设定对象的属性和方法
            2、构造函数和实例化对象
                构造函数:就是专门定义生成对象的函数
                        必须和关键词 new 配合使用
                实例化对象:本质上就是一个对象,只不过是通过构造函数生成的
            
            3、原型链
                原型对象:
                    每一个 函数 都有一个 prototype
                    本质上一个专门存储 数据 和 方法(函数) 的空间
                原型属性:
                    每一个 对象 都有一个 __proto__
                    实例化对象的 __proto__ 指向的 就是 生成这个实例化对象的构造函数的 prototype
                原型链:
                    通过 __proto__ 将相互关联的数据,串联起来,可以相互访问数据的功能,就称为原型链
                    在JavaScript中任意一个数据类型,都可以看做是对象,都有 __proto__
                    举例:
                        定义 构造函数时, 将 实例化对象的方法,定义在构造函数的 prototype 中
                        生成 实例化对象 时 对象本身只有定义在 构造函数中的属性
                                          没有定义在 prototype 中的方法
                        在 执行 实例化对象 时, 要调用方法,是通过原型链 也就是 通过 __proto__ 
                        找到 构造函数 的 prototype 空间 并且调用其中 存储的方法
            4、构造函数
                构造函数为了和普通函数区别,一般是将所有函数名称单词是的首字母大写
                不大写也能执行,但是不符合语法按规范
                
                定义构造函数:
                    在函数内,定义实例化对象的方法,通过的是this来指定定义实例化对象的属性
                        this.属性 = 属性值
                    在 prototype 中 定义 实例化对象的方法
                        构造函数.prototype.函数方法名 = function(){}
                使用,调用构造函数,必须和 new 关键词一起使用