网络编程
位置:首页>> 网络编程>> JavaScript>> [翻译]JavaScript中对象的层次与继承(5)

[翻译]JavaScript中对象的层次与继承(5)

作者:chenzhe 来源:chenzhe 发布时间:2008-12-31 13:36:00 

标签:类,对象,继承,javascript,编程


更灵活的构造器

至今为止,我们使用的构造函数都不允许你在创建实例的时候指定属性值。就像在Java中一样,你可以给构造器提供参数来初始化实例的属性值。图5展示了实现的方法。

在构造器内设置属性,take 1

图 5

下面是Java和JavaScript 对这些对象的定义。

程序代码
JavaScript 的方法

function Employee (name, dept) {
  this.name = name || "";
  this.dept = dept || "general";
}

function WorkerBee (projs) {
  this.projects = projs || [];
}
WorkerBee.prototype = new Employee;

function WorkerBee (projs) {
  this.projects = projs || [];
}
WorkerBee.prototype = new Employee;

function Engineer (mach) {
  this.dept = "engineering";
  this.machine = mach || "";
}
Engineer.prototype = new WorkerBee;

程序代码
Java 的方法

public class Employee {
  public String name;
  public String dept;
  public Employee () {
    this("", "general");
  }
  public Employee (name) {
    this(name, "general");
  }
  public Employee (name, dept) {
    this.name = name;
    this.dept = dept;
  }
}

public class WorkerBee extends Employee {
  public String[] projects;
  public WorkerBee () {
    this(new String[0]);
  }
  public WorkerBee (String[] projs) {
    this.projects = projs;
  }
}

public class Engineer extends WorkerBee {
  public String machine;
  public WorkerBee () {
    this.dept = "engineering";
    this.machine = "";
  }
  public WorkerBee (mach) {
    this.dept = "engineering";
    this.machine = mach;
  }
}

这些JavaScript定义使用一种特殊的风格(idiom)来设置默认值。

程序代码

this.name =  name || "";

JavaScript的逻辑或操作符(||)先计算第一个参数的值。如果该参数转换为true,操作符就将它返回。否则,或操作符返回第二个参数。因此,这行代码尝试着看看name是否有满意的值。如果有,将this.name的值设置为这个值。否则,它将this.name的值设置为空字符换。本篇文章都会使用这种简洁的风格;然而,第一次看到可能会有一些令人迷惑。

有了这些定义,当你创建任何对象的实例时,你都可以给本地定义的属性设定值了。就像在图5中展示的,你可以使用这个语句来创建一个新的Engineer:

程序代码

jane = new  Engineer("belau");

现在Jane的属性如下:

程序代码

jane.name ==  "";
jane.dept == "general";
jane.projects  == [];
jane.machine == "belau"

需要注意的是,使用这个定义,你不能给name等继承的属性指定初始值。如果你想要在JavaScript中给继承的属性设定初始值,你需要再给构造函数多添加一些代码。

到目前为止,构造函数已经创建了一个通用的对象,然后再给新对象指定本地的属性和值。你可以给构造器添加更多的属性,只要调用原型链中更高位置上的构造函数就可以做到这点。图 6展示了这些新的定义。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com