设为首页 加入收藏

TOP

计算机二级辅导:悟透JavaScript(3)
2014-11-19 00:59:26 】 浏览:2658
Tags:计算机 二级 辅导 悟透 JavaScript

  初看原型


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


  java script 的所有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 };


  编辑特别推荐:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇计算机二级辅导:悟透JavaScript(2) 下一篇计算机二级辅导:悟透JavaScript(4)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目