[翻译]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展示了这些新的定义。


猜你喜欢
- 一、表单验证form1、创建一个新的表单:<form id="id是唯一的,不可重复" name=“可重复”,me
- 在众多代码编辑工具中,我最喜欢的就是微软的vscode。首先它十分轻便,不吃硬件,运行非常顺畅;其次是其各种各样的插件使得编程效率蹭蹭地往上
- 对于个人站长来说,如何能使自己的网站与众不同、充满个性,一直是不懈努力的目标。除了尽量提高页面的视觉效果、互动功能以外,如果能在打开网页的同
- 如何显示一个等待或欢迎信息? <% Response.Buffer = True %
- 排序查询(order by)电商中:我们想查看今天所有成交的订单,按照交易额从高到低排序,此时我们可以使用数据库中的排序功能来完成。排序语法
- JSON Schema是一个用于验证JSON数据结构的强大工具, 我查看并学习了JSON Schema的官方文档, 做了详细的记录, 分享一
- 目录前言一、常用命令二、嗅探数据包三、构造数据包四、各个协议用法五、发包,收包六、SYN半开式扫描七、数据包序列化,反序列化八、数据包与字符
- 最简单、直观的认识,将 yield 看做 return 对待,只是 return 返回一个值,而 yield 返回一个生成器。要理解 yie
- 具体代码如下所示:import numpy as npfrom matplotlib import pyplot as pltfrom sc
- 前言:通过@语句调用一个函数去给另一个函数增加或修改一些功能的语法规则称之为Python装饰器。下面通过一个小案例来简单的理解什么是装饰器。
- 起步利用 html5 的 <video> 标签可以播放:<video width="320" heig
- 引用Nmap库实现扫描功能,本节课比较简单一看就会。编写环境:Python2.x编写:首先安装Nmap程序,并添加环境变量pip insta
- 本文阐述了网页设计中的十大诀窍,作为网页开发者我们应该注意,这样才能最大限度得发挥网站的功能和效益: 预早筹划设计主页未必很艰难。
- 随着业务量的增长,可能需要对表进行拆分来提高性能。下面这个例子是将www.jb51.net的users表拆分成10个表ttlsa_user_
- 利用ACCESS可以用查询创建视图这一功能来进行查询分析。选择查询->在设计视图中创建查询,然后关闭弹出的表选择对话框,在下面的窗口上
- 本文实例分析了Go语言多值替换的HTML模板用法。分享给大家供大家参考。具体如下:这里通过两种方式提供基于HTML模板的多变量值替换。另外附
- 前言:设计模式在我们编程中是十分重要的!设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用
- FrontPage 2003在功能上增强了不少,下面我们一起来看看新版本中比较突出的9个新功能。1.自定义浏览器分辨率预览检查 在
- 用python实现21点小游戏,供大家参考,具体内容如下from random import shuffleimport randomimp
- matplotlib简介matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行