我有一组用户,我刚收到JSON服务器响应。假设如下:
var users = [
{id: 1, name: 'john', surname: 'smith'},
{id: 2, name: 'john', surname: 'smith'},
{id: 3, name: 'john', surname: 'smith'},
{id: 4, name: 'john', surname: 'smith'},
{id: 5, name: 'john', surname: 'smith'},
{id: 6, name: 'john', surname: 'smith'},
{id: 7, name: 'john', surname: 'smith'}
];
在业务逻辑的某些点和应用程序的(车把)模板中,我需要拥有每个用户的全名但当然我不想重复name + ' ' + surname
的串联逻辑这个地方。
因此,我执行以下“增强”这些用户并添加我想要的功能:
for(var i=0,length=users.length; i<length; i++) {
users[i].getFullName = function() {
return this.name + ' ' + this.surname;
}
}
这项技术运作正常,但我的问题是:
getFullNameOfUser(user)
。答案 0 :(得分:4)
您可以创建一个类Users,并将getFullNameOfUser添加到原型中。
var User = function(obj){
this.id = obj.id;
this.name = obj.name;
this.surname = obj.surname;
};
User.prototype.getFullNameOfUser = function(){
return this.name + ' ' + this.surname;
};
for(var i=0,length=users.length; i<length; i++) {
users[i] = new User(users[i]);
}
关于评论中的问题,您可以这样做:
var User = function(obj){
for(var key in obj){
this[key] = obj[key];
}
};
但是这样你最终可能会在对象中找到不需要的属性
答案 1 :(得分:0)
这似乎效率低下,因为您正在为每个用户添加一个函数。
使用handlebars.js你应该能够简单地处理视图中的连接,即:
<h2>Welcome {{user.name}} {{user.surname}}!</h2>
答案 2 :(得分:0)
您可以随时创建一组实用程序函数,并根据需要使用特定上下文调用它们。
function getFullName () {
return this.name + ' ' + this.surname;
};
getFullName.call(users[0]);