浓缩解读前端系列书籍一周一章前端书

一周一章前端书·第9周:《你不知道的JavaScript(上)》

2017-12-02  本文已影响3人  梁同学de自言自语

第4章 :混合对象“类”

4.1 类理论

4.1.1 “类”设计模式
4.1.2 JavaScript中的“类”

4.2 类的机制

4.2.1 建造
4.2.2 构造函数

4.3 类的继承

注意:有必要说明一下,这里说的父类和子类不是实例,而是像上文说得建造蓝图一样。我们应当把父类和子类称为父类DNA和子类DNA,需要根据这些DNA来创建(实例化)一个人,我们才拥有一个真实的实例。

4.3.1 多态

说明:实际上多态是任何方法都能引用继承层级中上层的类的方法。之所以说是“相对”,是因为当前子类引用的是父类的方法,而实际上还可以引用祖先类(superclass)的方法。

4.3.2 多重继承

4.4 混入

4.4.1 显式混入
function minxin(sourceOBj,targetObj){
    for(var key in sourceObj){
        if(!(key in targetObj)){
            targetObj[key] = sourceObj[key];
        }
    }
    return targetObj;
}
var Vehicle = {
    engines : 1,
    ignition: function(){
        console.log('Turning on my engine.');
    },
    drive : function(){
        this.ignition();
        console.log('Steering and moving forward!');
    }
};
var Car = mixin(Vehicle,{
    wheels : 4,
    drive : function(){
        Vehicle.drive.call(this);
        console.log(
            'Rolling on all' + this.wheels + ' wheels!'
        );
    }
};
function Vehicle(){
    this.engines = 1;
}
Vehicle.prototype.ignition = function(){
    console.log('Turning on my engine.');
}
Vehicle.prototype.drive = function(){
    this.ignition();
    console.log('Steering and moving forward!');
};
function Car(){
    var car = new Vehicle();
    car.wheels = 4;
    var vehDrive = car.drive;
    car.drive = function(){
        vehDrive.call(this);
        console.log('Rolling on all ' + this.wheels + ' wheels!');
    }
    return car;
}
var myCar = new Car();
myCar.drive();
4.4.2 隐式混入
var Something = {
    cool : function(){
        this.greeting = 'Hello World!'
        this.count = this.count ? this.count + 1 : 1;
    }
};
Something.cool();
Something.greeting; //'Hello World'
Something.count;    //1
Another = {
    cool : function(){
        Something.cool.call(this);
    }
};
Another.cool();
Another.greeting;   // 'Hello World'
Another.count;  // 1

4.5 小结

上一篇 下一篇

猜你喜欢

热点阅读