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]
})
}
}
たとえば、 User モデルがあります。
var Model = require('models/Model')
function User (properties) {
this.fields = [
'id',
'name',
'surname',
'email',
'password'
]
this.setFields(properties)
//[...]
}
そこでは、setFields()
呼び出しが正しく機能し、User モデルで指定された 5 つのフィールドのそれぞれを反復処理します。ただし、ユーザー プロパティは設定されません。定義console.log(this.name)
の末尾にa を追加すると、 が得られます。この問題を回避する唯一の方法は、オブジェクトをメソッドの引数として渡し、代わりに引数を使用することでした。setFields()
undefined
this
setFields
this
私にはスコープの問題のように見えますが、私はまだ JavaScript OO に慣れていないので... 私のロジックの何が問題なのですか?