代码之家  ›  专栏  ›  技术社区  ›  Justin Helgerson

创建/填充javascript自定义对象

  •  7
  • Justin Helgerson  · 技术社区  · 15 年前

    我已经创建了一个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's。 module pattern .

    3 回复  |  直到 15 年前
        1
  •  8
  •   FK82    15 年前

    如果不进行实例化,则无法访问第一个对象的属性,即使用 new 关键词:

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

    第二个对象是一个对象文本,它不需要实例化就可以访问,因为它在解析时已经被实例化了。

    如果你想使用的话,差异就会发挥作用。 prototypical inheritance 在旧对象的基础上创建新对象。如果您有一个相当紧凑的代码库,那么编写一个对象文本可能更容易理解,而且模式也更合适。但是,如果您想通过用另一个对象扩充现有对象来创建新对象,而不必重写被扩充的对象,那么原型制作就非常方便:

    ipUser.prototype = User ;
    ipUser.ip =  "128.0.0.1" ;
    

    在您的例子中,这种差异似乎并不显著,但是您必须想象,如果您为原始对象的每一个微乎其微的添加创建另一个对象文字,您将得到多少多余的代码。

    窥视 Mozilla开发中心 页面上的javascript对象如果您有其他问题,可以很好地概述: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Object .

    高温高压

        2
  •  5
  •   Bob    15 年前

    不必首先创建值为空的对象。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');
    
        3
  •  1
  •   edwin    15 年前

    第一个是典型的对象,从OOP中知道。您可以添加这样的函数来对属性进行操作(假设有一个函数getfullname):

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

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

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