在我的应用程序中,我收到了一组带有JSON的评论。
然后,我想为此集合中的每个项目添加函数,例如,如果评论有comment.first_name
和comment.last_name
,我想构建comment.full_name()
。
到目前为止,我正在做:
comment.full_name = function() { return this.first_name+" "+this.last_name }
我的问题是,由于有很多评论(和其他方法比这个更复杂),我怎样才能使用原型或构造函数来添加相同的功能集合中的每个项目,而不是将其插入每个元素?
修改:
以下是代码示例:
comments = ({"1": {"first_name":"John", "last_name":"Silver"}, "2": {"first_name":"Jack", "last_name":"Sparrow"}})
现在,我正在寻找会返回的东西
comments[1].name() //=> John Silver
comments[2].name() //=> Jack Sparrow
答案 0 :(得分:1)
鉴于JSON没有封装任何有关类型的信息,我不确定如果不将该方法添加到对象原型中,就可以执行此操作。这是否可取是一个需要辩论的主题。一旦你从JSON解析器获得了数据,最好一次一个地打击对象(就像你现在看到的那样)。
答案 1 :(得分:1)
要回答您的直接问题,您可以通过附加来附加到对象的原型,并使用prototype
关键字将其附加到原型链。要将函数full_name()
附加到comment
对象的原型,您可以执行以下操作:
comment.prototype.full_name = function () {
if (typeof(this.first_name) !== "undefined" && typeof(this.last_name) !== "undefined") {
return this.first_name + " " + this.last_name;
} else {
return ""
}
};
编辑:
以上代码也适用于您的情况。它会将属性full_name
附加到JSON对象中的每个值。 full_name
是一个功能。只要两个属性都不是first_name
,它将返回包含当前对象的last_name
属性,空格和当前对象的undefined
属性的连接字符串。如果其中一个或两个都是,则会返回empty string
。