面向对象

es5中的面向对象
js本身没有class,但是每个函数都有prototype属性。prototype指向一个对象,当函数作为构造函数时,prototype则起到类似class的作用。
面向对象三大特征:
    封装:把一种事物的方法和属性封装到对象中
    继承:子对象可以继承父对象的属性和方法
    多态:同一个方法,自定义和父定义的内容不同
面向对象编程的优势
易维护、质量高、效率高、易扩展(耦合性比较低)
创建对象的方式:
    字面量形式 : {}
    Object构造函数创建
    构造函数形式:new XXXX
遍历对象:
    for...in
序列化;
    可以把对象转换为字符串:JSON.stringify();
    可以把字符串转换为对象:JSON.parse();
this关键词:
    this的4种绑定规则分别是:默认绑定、隐式绑定、显示绑定、new 绑定
    默认绑定:this指向当前对象
    隐式绑定:function a(){ this } ==> obj={a:a} this指向obj
    显示绑定:fun.call(obj) fun中this指向obj
    new绑定: p = new XXX new可以改变this指向 this指向p
继承:
    原型和原型链继承:new 父对象 赋值给子对象的原型
    构造函数继承: 在子对象函数体内,由父对象.call()
    组合继承: 原型链继承+ 构造函数继承
设计模式:
    单例模式:一个类只能有一个实例,并提供一个访问它的全局访问点
    工厂模式:用固定的方式批量创建对象
    观察者模式:设立观察这方法,观察是否有值更新,通过Object.defineProperty,修改其他对象的属性
    订阅模式:发布者内容变化,通过中间层接受并通知订阅者,订阅者收到通知,更新对应的属性 以及其他模式
es6中的面向对象
    class定义类
    static 静态属性
    constructor方法,通过new命令生成对象实例时,自动调用该方法
    super 父类构造函数
    extends继承关键字
    和后台语言越来越接近了


多层的json数据怎么遍历