Javascript - 使用不同的值添加相同的属性

时间:2013-12-14 19:53:39

标签: javascript oop object

重要:代码有效,所以这更像是“这是正确的方法吗?”问题

我试图在函数中为我的对象属性添加不同的值,然后将其推送到数组。 对象属性应保持不变,但名称应更改。

输出:

Object { 
  clientId="cXbHV32Sz0gh-10Mo6DX", 
  userName="Foo"
}, 
Object { 
  clientId="J3ZkTsK6ixTM6pUBo6DY", 
  userName="bar"

我只能用这个解决方案来实现它:

var clientObj =  function (clientId, userName){
    var that = this;
    this.clientId = clientId;
    this.user
}

function myFunc(socket.id, userName){
    var clientInfo = new clientObj(socket.id, userName)
    clientList.push(clientInfo)
}

我想知道我是否真的需要在这里拥有一个构造函数,除了保存我的属性之外什么也没做。

如何在不使用构造函数的情况下实现此目的?

我想到了类似的东西(但这只会取代值):

var ClientObj = {}

function myFunc(socketId, userName){
  ClientObj['socketID'] = socketID
  ClientObj['userName'] = userName
  clientList.push(clientObj)
}

对不起,如果这可能有点令人困惑

2 个答案:

答案 0 :(得分:1)

只是一些小事。您的that变量目前无用。当你需要在Ajax回调中保持对对象的引用时,通常使用类似的东西。

  • clientObj应该大写,因为它是构造函数。

  • 考虑将clientObj作为函数声明,以便它将被悬挂,这对您来说可能重要,也可能不重要。

所以也许这样的事情

function ClientObj(clientId, userName){
    this.clientId = clientId;
    this.user = userName;
}

此外,这是无效的:

function myFunc(socket.id, userName){

我认为你的意思是这样的:

function myFunc(socketId, userName){

答案 1 :(得分:1)

如果我理解你的话。您希望使用具有相同值但具有不同属性名称的某些外部对象并将其推送到数组。在这种情况下,我会写一些类似的东西:

function Client(obj) {
    this.clientId = obj.clientId;
    this.user = obj.userName;
    return this;
}

Client.prototype.pushTo = function(arr) {
    arr.push(this);
    return this;
};

var clientList = [];

然后,当我收到一个对象时:

var externalObj = { clientId: 'blah', userName: 'name' };

我可以打电话:

var convertedClient = new Client(externalObj).pushTo(clientList);

你将它转换,推送到数组并将其分配给局部变量全部使用相同的一个衬垫。此外,如果您稍后想要使用相同类型执行新操作,则可以添加它们。

Client.prototype.clearName = function(){
    this.name = '';
    return this;
};

如果你继续从原型中返回它,你可以一个接一个地链接很多命令。

var processedClient = new Client(obj).pushTo(arr).clearName();

我不确定这是否是您正在寻找的东西,但有一些值得思考的东西。通过自定义类型并且必须调用构造函数不再那么糟糕了。


<强>更新


出于乐趣,我决定用这个小提琴来玩:http://jsfiddle.net/Y3eA5/