选择原型以避免if-else

时间:2018-02-09 10:33:36

标签: javascript oop inheritance prototype

我在一个博客上找到的以下代码片段,以避免if-else语句。此代码非常模块化,可以轻松扩展。但是我无法让它发挥作用。

CatModel.prototype.makeWords = function () {
    console.log('inside catmodel') 
    this.setWord('meow')
    this.sayIt()
}

DogModel.prototype.makeWords = function () {
    console.log('inside dogmodel')
    this.setWord('bark')
    this.saySomething()
}


// somewhere else
var makeWords = function (type) {
    var model = namespace[type + 'Model']
    model.makeWords()
}

makeWords('cat')

1 个答案:

答案 0 :(得分:2)

推测CatModelDogModel函数在某处声明,setWordsayIt也在prototype对象上设置。

您需要将CatModelDogModel放入对象中并从namespace引用它(我建议打电话给namespace):

var namespace = {
    CatModel: CatModel,
    DogModel: DogModel
};

然后在创建实例时,使用new(您始终使用new和构造函数)。我还会将()置于通话中,即使严格来说,如果您没有参数可以通过,我也会选择var makeWords = function (type) { var model = new namespace[type + 'Model']() // ---------^^^--------------------------^^ model.makeWords() }

https://api.telegram.org/bot447278997:*******************************nZW0/setWebhook?url=https://example.com/webhookMethod