2

我正在创建一个小库来与 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 还是很陌生,所以......我的逻辑有什么问题?

4

1 回答 1

3

您需要提供一个context参数来_.each设置this您在回调函数中期望的上下文:

setFields: function(values) {
    _.each(this.fields, function(field) {
        this[field] = values[field];
    }, this);  // context parameter that establishes this in your callback
}
于 2012-11-25T19:33:36.063 回答