4

我想做的是这样的:

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

问题是我们不能在虚拟 getter 中传递参数,我怎样才能在不复制代码的情况下实现这样的目标?

4

2 回答 2

9

将其添加为实例方法而不是虚拟 getter。

schema.methods.getSomething = function(what) {
    if (!what) {
        return this.somethingElse
    } else {
        return this.something[what]
    }
};
于 2012-11-26T14:39:11.567 回答
4

Getter 不接受任何参数,因为它们应该替换正常的“获取属性”功能,不带括号。所以你需要定义一个方法:

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

然后你可以简单地调用:

mySchemaObject.getSomething( "test" );
于 2012-11-26T14:39:29.327 回答