2010-05-10 103 views
7

我創建了一個ashx頁面,它將爲我提供一個充滿基本用戶信息的XML文檔。我不確定哪些是創建和填充自定義JavaScript對象的最佳方式。我看過他們在兩個方面產生:創建/填充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

回答

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

Hth

1

第一個是典型的對象,從OOP中知道。可以添加功能,以在這樣的屬性(假設有一個函數getFullName)作用:

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

第二個是隻是一個關聯數組,其中字符串被映射到的值。

在JavaScript中,兩者之間的界限並不像其他編程語言那樣嚴格。

+2

它不是一個關聯數組,它是一個對象字面 – Bob 2010-05-10 19:40:44

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');