伊人怎会持宠而骄
希望有人懂你的低头不语、小心翼翼守护你的孩子气
1、梳理知识点
面向对象 : 功能独立 便于后期维护   变量的私有化
面向过程 : 
什么是类 :  
类和对象的关系 :
对象创建的几种方式
 1、字面量创建方法{  }  new Object()
 2、 工厂模式 instanceof  
 3、构造函数 
 4、解决构造的缺点 :使用原型方法    
 5、混合     
原型对象 : 构造函数都有一个prototype属性 该属性就是原型对象  
原型链 : 实例对象和原型之间的连接
    function Fun(){
        this.name = "jack"
    }              
    Fun.prototype.name = "lily"
    Fun.prototype.age = 10;
    var f = new Fun();
    console.log( f.name , f.age)  jack  10
原型模式的执行流程 : 
 
2、继承 
面向对象的三大特性:  封装  继承  多态(js没有)
继承 : 子类继承父类所有的属性和方法
 
3、继承方式一 : 通过改变父类的执行环境
function Father(){
    this.money = 999999999999;
    this.sing = function(){
        console.log("唱歌");
    }
}
function Son(){
    在子类中定义一个属性  这个属性的值指向父类的构造函数
    this.parent = Father;
    调用子类的属性 
    this.parent();
}
 
4、通过call或apply继承
call和apply:改变非匿名函数的this指向(不能继承原型)
    在子类中调用父类
    Father.call(this,name)用call方式接收实参
    var Son = new Son("xiaoming")
 
    Father.apply(this,arguments)用数组方式接收实参
    var Son = new Son("xiaoming")
 
call和apply的区别 : 
    call的第二个参数个数不固定
    apply的第二个参数是一个数组,可以通过arguments来代替
 
5、原型继承
让子类的原型对象指向父类new出来的实例对象( 首先在子类的实例上查找,找不到去原型上查找)
子类.prototype = new 父类();
 
缺点:
    继承可变的实例属性时,属性值无法更改
    这样的实例属性应该由call或apply的方式继承
 
6、混合继承
通过call或apply方式继承实例属性
通过原型继承  继承方法
 
7、ES6的构造函数
class 构造函数名{
    constructor(属性){ 使用constructor构造属性
        this.属性 = 属性
    }
    方法(){
 
    }
}
例如 : 
   class Student{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        study(){
            return ""
        }
 
        eat(){
            console.log()
        }
   }
 
8、ES6的继承
    class Son extends Father{ extends继承
       constructor(name,age,score){
           super(name,age); 使用super可以继承父类的属性和方法
           this.score = score;//子类特有的属性
       }
       //子类特有的方法
        study(){
           return "学习ing";
       }
    }
 
 
 
 
 
posted on 2019-01-22 10:29  伊人怎会持宠而骄  阅读(99)  评论(0编辑  收藏  举报