首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过prototype方法设置对象的属性

通过prototype方法设置对象的属性
EN

Stack Overflow用户
提问于 2012-11-26 03:28:41
回答 1查看 110关注 0票数 2

我正在创建一个小的库来与MongoLab HTTP API交互,但是我遇到了一些问题。我使用的是CommonJS模块。

我有一个Model对象,作为其他模型的原型:

代码语言:javascript
复制
module.exports = {
    //[...]

    //this will be overriden by the other models
    fields: ['id'],

    setFields: function(values) {
        _.each(this.fields, function(field) {
            this[field] = values[field]
        })
    }
}

例如,我有一个用户模型:

代码语言:javascript
复制
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还是很陌生的,所以……我的逻辑有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 03:33:36

您需要向_.each提供一个context参数,以便在回调函数中设置预期的this上下文:

代码语言:javascript
复制
setFields: function(values) {
    _.each(this.fields, function(field) {
        this[field] = values[field];
    }, this);  // context parameter that establishes this in your callback
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13554612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档