加入收藏 收藏网站 设为首页 设为首页
招生考试网
学历类| 阳光高考 研 究 生 自学考试 成人高考 专 升 本 中考会考 外语类| 四 六 级 职称英语 商务英语 公共英语 日语能力
资格类| 公 务 员 报 关 员 银行从业 司法考试 导 游 证 教师资格 财会类| 会 计 证 经 济 师 会计职称 注册会计 税 务 师
工程类| 一级建造 二级建造 造 价 师 造 价 员 咨 询 师 监 理 师 医学类| 卫生资格 执业医师 执业药师 执业护士 国际护士
计算机| 等级考试 软件水平 应用能力 其它类| 书画等级 美国高考 驾 驶 员 书法等级 少儿英语 报 检 员 单 证 员 出国留学
 招生考试网 - 计算机等级考试 - 考试辅导 - 正文

 
JavaScript(3)
来源:fjzsksw.com 2009-11-26 编辑:yangmeiling 【字体:小 大】

初看原型

  prototype源自法语,软件界的标准翻译为“原型”,代表事物的初始形态,也含有模型和样板的意义。JavaScript中的prototype概念恰如其分地反映了这个词的内含,我们不能将其理解为C++的prototype那种预先声明的概念。

  JavaScript 的所有function类型的对象都有一个prototype属性。这个prototype属性本身又是一个object类型的对象,因此我们也可以给这个prototype对象添加任意的属性和方法。既然prototype是对象的“原型”,那么由该函数构造出来的对象应该都会具有这个“原型”的特性。事实上,在构造函数的prototype上定义的所有属性和方法,都是可以通过其构造的对象直接访问和调用的。也可以这么说,prototype提供了一群同类对象共享属性和方法的机制。

  我们先来看看下面的代码:

  function Person(name)

  {

  this.name = name;   //设置对象属性,每个对象各自一份属性数据

  };

  Person.prototype.SayHello = function()  //给Person函数的prototype添加SayHello方法。

  {

  alert("Hello, I'm " + this.name);

  }

  var BillGates = new Person("Bill Gates");   //创建BillGates对象

  var SteveJobs = new Person("Steve Jobs");   //创建SteveJobs对象

  BillGates.SayHello();   //通过BillGates对象直接调用到SayHello方法

  SteveJobs.SayHello();   //通过SteveJobs对象直接调用到SayHello方法

  alert(BillGates.SayHello == SteveJobs.SayHello); //因为两个对象是共享prototype的SayHello,所以显示:true

  程序运行的结果表明,构造函数的prototype上定义的方法确实可以通过对象直接调用到,而且代码是共享的。显然,把方法设置到prototype的写法显得优雅多了,尽管调用形式没有变,但逻辑上却体现了方法与类的关系,相对前面的写法,更容易理解和组织代码。

  那么,对于多层次类型的构造函数情况又如何呢?

  我们再来看下面的代码:

  1     function Person(name)   //基类构造函数

  2     {

  3         this.name = name;

  4     };

  5

  6     Person.prototype.SayHello = function()  //给基类构造函数的prototype添加方法

  7     {

  8         alert("Hello, I'm " + this.name);

  9     };

  10

  11     function Employee(name, salary) //子类构造函数

  12     {

  13         Person.call(this, name);    //调用基类构造函数

  14         this.salary = salary;

  15     };

  16

  17     Employee.prototype = new Person();  //建一个基类的对象作为子类原型的原型,这里很有意思

  18

  19     Employee.prototype.ShowMeTheMoney = function()  //给子类添构造函数的prototype添加方法

  20     {

  21         alert(this.name + " $" + this.salary);

  22     };



 
  • 上一个文章:

  • 下一个文章:
  • 网站版权与免责声明
    ①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
    ②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
    最新文章
    热门文章

    报名考试
    全国 | 黑龙江 | 吉林 | 辽宁 | 内蒙古
    青海 | 宁夏 | 甘肃 | 新疆 | 陕西
    西藏 | 北京 | 天津 | 河北 | 山东
    江苏 | 安徽 | 河南 | 上海 | 浙江
    福建 | 广东 | 山西 | 湖南 | 湖北
    江西 | 广西 | 海南 | 云南 | 贵州
    四川 | 重庆
    分省高校计算机考试
    黑龙江 | 吉林 | 辽宁 | 内蒙古 | 河北
    北京 | 天津 | 新疆 | 甘肃 | 宁夏
    青海 | 陕西 | 山西 | 河南 | 山东
    江苏 | 安徽 | 浙江 | 福建 | 广东
    海南 | 广西 | 江西 | 湖北 | 湖南
    四川 | 上海 | 重庆 | 贵州 | 云南
    西藏
    成绩查询
    报考指南
    试题答案
    模拟试题
    考试辅导
    计算机一级 | 计算机二级 | 计算机三级 | 计算机四级
    经验交流
    高校计算机