我已经创建了一个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的module pattern。
答案 0 :(得分:8)
您无法在没有实例化的情况下访问第一个对象的属性,即使用new
关键字:
var myUser = new User() ;
document.write(myUser.id) ;
第二个对象是一个对象文字,无需实例化即可访问,因为它在解析时已经实例化。
如果您希望使用prototypical inheritance
基于旧对象创建新对象,则会产生差异。如果你有一个相当紧凑的代码库,写一个对象文字可能更容易理解,更合适的模式。但是,如果你想通过用另一个对象扩充现有对象来创建一个新对象而不必重写被扩充的对象,那么原型设计会派上用场:
ipUser.prototype = User ;
ipUser.ip = "128.0.0.1" ;
在你的情况下,这种差异可能看起来并不显着,但你必须想象如果你为每个微小的原始对象添加创建另一个对象文字,你将获得多少冗余代码。
如果您有其他问题,请查看JavaScript对象上的 Mozilla开发人员中心页面,概述非常好:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Object。
H个
答案 1 :(得分:5)
您不必先创建具有空值的对象。 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');
答案 2 :(得分:1)
第一个是典型的对象,从OOP中可以看出。您可以添加函数来处理这样的属性(假设有一个函数getFullName):
var u = new User();
u.getFullName();
第二个只是一个关联数组,其中字符串映射到值。
在JavaScript中,两者之间的界限并不像在编程语言中那么严格。