我创建了一个ashx页面,它将为我提供一个充满基本用户信息的XML文档.我不确定哪个是创建和填充我的自定义javascript对象的最佳方法.我见过他们以两种方式创建:
function User() {
this.Id;
this.FirstName;
this.LastName;
this.Title;
}
Run Code Online (Sandbox Code Playgroud)
和
var User2 = {
Id: null,
FirstName: null,
LastName: null,
Title: null
}
Run Code Online (Sandbox Code Playgroud)
我可以通过执行以下操作来填充其中的每一个:
//first object
User.Id = 1
//second object
User2.FirstName = 'John'
Run Code Online (Sandbox Code Playgroud)
创建对象的一种方法比另一种更好吗?
编辑:一年半之后,我看到这个问题得到了流行的徽章,所以我只是想提一下今天我正在使用Crockford的模块模式.
您无法在没有实例化的情况下访问第一个对象的属性,即使用new关键字:
var myUser = new User() ;
document.write(myUser.id) ;
Run Code Online (Sandbox Code Playgroud)
第二个对象是一个对象文字,无需实例化即可访问,因为它在解析时已经实例化.
如果您希望使用prototypical inheritance旧对象创建新对象,则会产生差异.如果你有一个相当紧凑的代码库,写一个对象文字可能更容易理解,更合适的模式.但是,如果您想通过使用另一个对象扩充现有对象而不必重写增强的对象来创建新对象,则原型设计会派上用场:
ipUser.prototype = User ;
ipUser.ip = "128.0.0.1" ;
Run Code Online (Sandbox Code Playgroud)
在您的情况下,这种差异可能看起来并不显着,但您必须想象如果您为原始对象的每次微薄添加创建另一个对象文字,您将获得多少冗余代码.
如果您有其他问题,请查看Mozilla开发人员中心的 JavaScript对象页面,它的概述非常好:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference : Global_Objects:Object .
心连心
您不必首先创建具有空值的对象.JavaScript不需要占位符,可以随时动态添加属性和方法.也就是说,这也足够了:
var User2 = {};
User2.Id = 1;
User2.FirstName = 'John';
//...Etc.
Run Code Online (Sandbox Code Playgroud)
如果您只关心存储数据,我会使用此表单(对象文字,即您的第二种方法).
更新:您还可以使事情变得更容易,并创建一个为您创建用户对象的函数:
function createUser(id, firstname, lastname, title) {
return {
Id: id,
FirstName: firstname,
LastName: lastname,
Title: title
};
}
var User2 = createUser(1, 'John', 'Smith', 'Manager');
Run Code Online (Sandbox Code Playgroud)