网络编程
位置:首页>> 网络编程>> 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之家的访客统计时,发现访客使用firefox浏览器的占了10%-15%,而大部分的访客使用的是IE6,呵呵我也是用IE6。而
  • 在使用SQL Server 的过程,中由于经常需要从多个不同地点将数据集中起来或向多个地点复制数据,所以数据的导出,导入是极为常见的操作.我
  • overflow:hidden 用在div上时很好用,但直接用在td上,好像没有任何效果。td中的文本过长时依然自动换了一行像下面这要设定一
  •     在网上游荡,看着别人的精彩主页难免心里痒痒的,但自己精心布置的家(个人主页),如果在不同的浏览器中呈现
  • 元素浮动导致的问题及解决办法大家都应该很熟悉了,举个简单的例子:<style type="text/css">
  • 恭喜您,您中奖了,你的中奖码是(请牢记,领奖需要):XXXXXXXXXXX然后用户输入XXXXXXXXXXX,简单验证后就可以领奖了。你使用
  • 首先,啰嗦几句废话如下: (1)触发器(trigger)是个特殊的存储过程,它的执行并不需要我们去显式调用,而是由一些事件触发,这有点类似C
  • 最近关于HTML5吵得火热,很多人认为HTML5出现会秒杀Flash,以至于在各大web前端开 * 坛吵得不可开交。论坛里三言两语说的不够 尽
  • 07年,我是极力推崇网站规范制作,好处很多,对商业,对用户,对设计师。我们走了两年,现在有了一定的成效,我们也看到了规范所带来的好处和便利。
  • 概述:本控件使用 html+css+javascript模拟HTML内置的select元素,实现其部分方法与属性,也增加了一部分功能,并且从
  • javascript作为一个动态语言,动态解析脚本的方法非常多,如万恶又万能的eval,低调的Function,IE独占的execScrip
  • 如何实现优惠打折?       代码及说明见下:<%@ LANG
  • DatePart 的语法是 DatePart(interval, date),用以取 date 的某部分。 interval yyyy:da
  • 这个间歇性向上滚动js代码很适合做广告展示,友情链接等等。与平常的无缝向上连续滚动不同的是它每滚动一个就会停顿一会儿。<!DOCTYP
  • 在开发数据库应用中,经常会遇到处理时间的问题,如查询指定时间的记录等。下面就这些常见的问题,结合自己的一些经验,和大家探讨一下这类问题。首先
  • 关于本文:本着互联网共享主义精神,特写此文献给建站新手,授人以鱼,不如授人以渔,本文所讲的只是方法和原理,希望大家看完此文,能够从中得到些帮
  • 我们可以用鼠标把Dreamweaver的层在页面内拖动,但要全屏拖动就困难了,下面是一种实现的方法:制作步骤:一、准备图片,取名/file/
  • 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi
  • PERCONA PERFORMANCE CONFERENCE 2009上,来自雅虎的几位工程师带来了一篇”Efficient Paginat
  • 今天在 经纬 同学blog看到的。有这么一段代码:<ul id="demo"><li>
手机版 网络编程 asp之家 www.aspxhome.com