创建/填充JavaScript自定义对象

7

我创建了一个ashx页面,它将为我提供一个包含基本用户信息的XML文档。我不确定创建和填充自定义JavaScript对象的最佳方法是什么。我看到它们有两种创建方式:

function User() {
   this.Id;
   this.FirstName;
   this.LastName;
   this.Title;
}

并且

var User2 = {
   Id: null,
   FirstName: null,
   LastName: null,
   Title: null
}

我可以通过执行以下操作来填充每个字段:
//first object
User.Id = 1

//second object
User2.FirstName = 'John'

哪种创建对象的方法更好?

编辑:一年半后,我看到这个问题得到了热门徽章,所以我想说今天我正在使用Crockford的模块模式

3个回答

9

如果没有实例化,即使用new关键字,您将无法访问第一个对象的属性:

 var myUser = new User() ;
 document.write(myUser.id) ;

第二个对象是一个对象字面量,它在解析时已经被实例化,因此可以在不实例化的情况下访问。
如果您想使用原型继承来创建一个新对象,则存在差异。编写对象字面量可能更容易理解,如果您有一个相对紧凑的代码库,则更适合使用这种模式。但是,如果您想通过将另一个对象与现有对象进行扩充而创建新对象而无需重写正在被扩充的对象,则原型非常有用:
ipUser.prototype = User ;
ipUser.ip =  "128.0.0.1" ;

在您的情况下,这种差异可能不太明显,但是您必须想象一下,如果您为原始对象的每个微小添加创建另一个对象文字,您将获得多少冗余代码。
如果您有其他问题,请查看Mozilla开发者中心有关JavaScript对象的页面,它已经很好地概述了:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Object
希望对您有所帮助。

8

你不需要先创建一个空值对象。JavaScript 不需要占位符,可以随时动态添加属性和方法。也就是说,下面的代码同样有效:

var User2 = {};
User2.Id = 1;
User2.FirstName = 'John';
//...Etc.

如果你只关心存储数据,我会使用这种形式(即对象字面量,即你的第二种方法)。

更新:您还可以更轻松地创建一个为您创建用户对象的函数:

function createUser(id, firstname, lastname, title) {
    return {
        Id: id,
        FirstName: firstname,
        LastName: lastname,
        Title: title
    };
}
var User2 = createUser(1, 'John', 'Smith', 'Manager');

1

第一个是典型的面向对象编程中的对象。您可以添加函数来操作属性,例如(假设有一个名为getFullName的函数):

var u = new User();
u.getFullName();

第二个是一个关联数组,其中字符串映射到值。

在JavaScript中,两者之间的边界不像其他编程语言那样严格。


2
这不是关联数组,而是对象字面量。 - Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接