美文网首页
js中的(混合对象)类

js中的(混合对象)类

作者: 李诺哦 | 来源:发表于2017-12-07 22:21 被阅读120次

    显式混入

    js手动实现类的复制功能

    function mixin(fatherObj, childObj) {
        for (var key in fatherObj) {
            if (!(key in childObj)) {
                childObj[key] = fatherObj[key]
            }
        }
    
        return childObj
    }   //复制方法,已有的key不复制
    
    var food = {  //创建父类
        caneat: true,
    
        tasty: function () {
            console.log("its delicious")
        }
    }
    
    var egg = mixin(food, {    //从父类拷贝到子类
        price: function () {
            console.log("very cheap")
        }
    })
    
    console.log(egg)  
    // {caneat: true, price: ƒ, tasty: ƒ}
    

    寄生继承

    // 传统类
    function Vehicle() {
        this.engines = 1
    }
    
    Vehicle.prototype.ignition = function () {
        console.log("启动引擎")
    }
    
    Vehicle.prototype.drive = function () {
        this.ignition()
        console.log("开起走")
    }
    
    function Car() {
        //现定义car是一个Vehicle
        var car = new Vehicle()
    
        //对car进行特殊定制
        car.wheels = 4
    
        //保存父类的drive到h
        var h = car.drive
    
        car.drive = function () {
            h.call(this)
            console.log("老实踩油门,拱起走")
        }
    
        return car
    }
    
    var polo = new Car()
    
    polo.drive()  
    //启动引擎
    //开起走
    //老实踩油门,拱起走
    

    以上例子,现复制父类Vehicle的定义,然后再混入子类的定义(如果需要保留到父类的特殊引用),然后用这个复合对象构建实例

    注意:这里调用new Car时会创建一个新对象并绑定到Car的this上,但是因为我们没有使用这个对象,而是返回了我们自己的car对象,所以最初创建的这个对象会被丢弃,因此可以不使用new关键字调用Car(),这样做的结果是一样的,但是可以避免创建并丢弃多余的对象

    相关文章

      网友评论

          本文标题:js中的(混合对象)类

          本文链接:https://www.haomeiwen.com/subject/nuwjixtx.html