2012-11-26 39 views
2

我試圖做的是類似的東西:添加參數在虛擬的getter

Schema 
.virtual('getSomething') 
.get(function(what) { 
    if (!what) { 
     return this.somethingElse 
    } else { 
     return this.something[what] 
    } 
}) 

的問題是,我們不能傳遞參數在虛擬消氣,我如何能實現類似的東西而不必重複我的代碼?

回答

5

將其添加爲instance method而不是虛擬獲取者。

schema.methods.getSomething = function(what) { 
    if (!what) { 
     return this.somethingElse 
    } else { 
     return this.something[what] 
    } 
}; 
+0

這正是我一直在尋找,謝謝! – Calvein

+1

事實上,它不是虛擬道具的替代品,它們非常不同[虛擬道具堅持模型,但原型方法不會傳遞給請求者],但OP似乎並不在意 –

3

Getters不接受任何參數,因爲它們應該取代正常的「get屬性」功能,沒有括號。那麼,你是什麼需要的是定義一個方法:

Schema.methods.getSomething = function(what) { 
    if (!what) { 
     return this.somethingElse; 
    } else { 
     return this.something[what]; 
    } 
}; 

,然後你可以簡單地調用:

mySchemaObject.getSomething("test");