创建对象

对象字面量

创建对象最基本的方法是使用对象字面量语法。对象字面量由括在花括号中的逗号分隔的属性 name:value 对列表组成。例如,以下代码创建一个包含客户信息的对象:

var customer={
    name:"John Doe",
    address:"1311 Maple Drive",
    city:"New York",
    state:"NY",
    zipcode:12345,
    phonenumber:"212-555-1234"  
};

指定属性的顺序无关紧要。事实上,DScript 按属性名称的字母顺序存储属性。这种组织方式使 DScript 在后续访问属性时更加高效。

New 运算符

创建对象更常见的方法是使用 New 运算符和对象构造函数。例如,以下代码使用名为 Object 的内置对象构造函数创建一个空对象:

var customer=new Object();

参见 new。

参见 Object。

创建对象后,可以按如下方式添加属性

customer.name="John Doe";
customer.address="1311 Maple Drive";
customer.city="New York";
customer.state="NY";
customer.zipcode=12345;
customer.phonenumber="212-555-1234";

需要注意的是,只需为其赋值即可创建新属性。在上面的示例中,对象 customer 最初没有属性。但是,执行以下语句

customer.name="John Doe";

既创建了新属性又为其赋了值。如果属性已存在,上述语句只是修改属性值。

对象构造函数

对象构造函数是使用 new 运算符调用的函数,用于设置默认属性值。在上面的示例中,使用名为 Object 的内置对象构造函数创建了一个空对象。创建对象更常见的方法是定义并使用自己的构造函数。以下构造函数接受客户名称作为参数并将其赋给相应的属性。该构造函数还为所有其他属性设置默认值。

Customer(name):={
    this.name=name;
    this.address="";
    this.city="";
    this.state="";
    this.zipcode=0;
    this.phonenumber="";
}

注意对象构造函数使用关键字 this 来引用正在构造的对象。DScript 允许使用简写符号来简化定义。每当引用属性但未给出对象名称时,对象被假定为 this,即,

.name 与 this.name 相同。因此,可以将 Customer 对象构造函数定义为 Customer(name):={ .name=name; .address=""; .city=""; .state=""; .zipcode=0; .phonenumber=""; }

另请注意,构造函数不返回对象;它只是初始化对象。运算符 New 负责创建对象并设置 this 的值。

参见 new。

参见 this。

使用上面的构造函数,可以按如下方式创建客户对象:

var customer=new Customer("John Doe");

通常,设计构造函数时会将所有必需的属性放在构造函数的参数列表中。在示例中,只有客户名称是必需的。所有其他属性都有默认值。

复制对象

当将对象复制到变量中时,DScript 会创建一个全新的对象。例如,以下代码创建两个名为 ob1 和 obj2 的对象:

var obj1=new Customer("John Doe");
var obj2=obj1;

如果修改 obj2 的内容,不会影响 obj1。这与某些 JavaScript 实现略有不同,在那些实现中将对象复制到变量只是复制指向原始对象的指针。与列表一样,DScript 按值而非按引用复制和比较对象。这是因为 DScript 将列表和对象视为基本数据类型,就像数字和文本字符串一样。

嵌套对象

对象可以包含其他对象作为属性值。例如,以下是一个 Order 对象的构造函数,其中包含 Customer 对象作为属性:

Order(name):={
    .customer=new Customer(name);
    .date=now;
    .items=[];
}