我正在创建一个小库来与 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()
调用正常工作,遍历用户模型中给出的五个字段中的每一个;虽然,它不会设置用户属性。如果我console.log(this.name)
在定义末尾添加 a setFields()
,它将给我undefined
. 我解决该问题的唯一方法是将this
对象作为setFields
方法的参数传递,并使用参数而不是this
.
这对我来说似乎是一个范围问题,但我对 JavaScript OO 还是很陌生,所以......我的逻辑有什么问题?