返回或接受2种不同的值类型

时间:2015-08-04 09:32:21

标签: javascript oop typescript

class apple{
    seed: number;
    color: string;
}

class orange{
    color: string;
    harvested: boolean;
}

class fruit{
    fruit1: apple;
    fruit2: orange;
    currentfruit: boolean;

    constructor{
        //something
    }

    getFruit(){
        if(!this.currentfruit){
           return this.fruit1;
        }else{
           return this.fruit2;
        }
    }

    showFruitData(){
        ???
    }
}

在上面的例子中,是否有一种方法来编写水果类,以便我可以替换???用:

  

的console.log(this.getFruit.color);

到目前为止,我能够管理的最接近的是:

  

的console.log(this.getFruit()的颜色。);

我真的不满意

1 个答案:

答案 0 :(得分:2)

这看起来像一个反模式。也许你应该使用访问者或存储库模式之类的东西。

interface IFruit {
    color: string;
}

class Apple impliments IFruit {
    seed: number;
    color: string;
}

class Orange impliments IFruit {
    color: string;
    harvested: boolean;
}

class FruitRepository {

    repository: IFruit[];

    selectedFruitIndex: number;

    get selectedFruit() {
        return this.repository[this.selectedFruitIndex];
    }

    get showFruitData() {
        console.log(this.selectedFruit.color);
    }

}

关于风格的说明。甚至Crockford说新的JavaScript对象应该是PascalCase而不是camelCase。所以类,构造函数和类型一般应该是PascalCase。