我在一个博客上发现以下代码片段,以避免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')
最佳答案
假定CatModel
和DogModel
函数在某处声明,并且setWord
和sayIt
也在其prototype
对象上设置。
您需要将CatModel
和DogModel
放在一个对象中,并从namespace
引用它(我建议不要调用namespace
):
var namespace = {
CatModel: CatModel,
DogModel: DogModel
};
然后,在创建实例时,使用
new
(您始终将new
与构造函数一起使用)。即使严格地说,如果您没有要传递的参数,它们也是可选的,但我也会在通话中加入()
:var makeWords = function (type) {
var model = new namespace[type + 'Model']()
// ---------^^^--------------------------^^
model.makeWords()
}