我正在创建一个小的库来与MongoLab HTTP API交互,但是我遇到了一些问题。我使用的是CommonJS模块。
我有一个Model对象,作为其他模型的原型:
module.exports = {
//[...]
//this will be overriden by the other models
fields: ['id'],
setFields: function(values) {
_.each(this.fields, function(field) {
this[field] = values[field]
})
}
}例如,我有一个用户模型:
var Model = require('models/Model')
function User (properties) {
this.fields = [
'id',
'name',
'surname',
'email',
'password'
]
this.setFields(properties)
//[...]
}在这里,setFields()调用正确地工作,遍历用户模型中给定的五个字段中的每一个;尽管它不会设置用户属性。如果我在setFields()定义的末尾添加一个console.log(this.name),它将显示undefined。我解决这个问题的唯一方法是将this对象作为参数传递给setFields方法,并使用该参数而不是this。
对我来说,这看起来像是一个范围问题,但我对JavaScript OO还是很陌生的,所以……我的逻辑有什么问题?
发布于 2012-11-26 03:33:36
您需要向_.each提供一个context参数,以便在回调函数中设置预期的this上下文:
setFields: function(values) {
_.each(this.fields, function(field) {
this[field] = values[field];
}, this); // context parameter that establishes this in your callback
}https://stackoverflow.com/questions/13554612
复制相似问题