&#106avascript学习:基础继承机制

继承

  最近因为学校做网站设计,所以一直在ASP上和数据库上大费苦心。
  
  我在前一个阶段是做Java程序设计的。突然接到任务并学习ASP,所以我一直都热忠并善于利用javascript来构架ASP程序。
  
  JavaScript的一个明显的优点就在于它可以定义和持有自己的对象。这一点好象是VBScript所无法比拟的。
  有了这一点,可以利用JavaScript进行更接近于面向对象的程序设计。也许这将使网站开发更有乐趣...
  
  但有个严重的缺点!JavaScript不支持继承机制。不象Java那样,支持extends关键字(虽然这个关键字在JavaScript中是保留字)。
  
  在微软的ASP.NET中,JavaScript才开始提供比较完善的支持。PHP语言当然也有继承机制的支持,这些都叫我垂青...
  
  不过现在我根本无法说服学校的老头子们买更好的域名空间,但是我也不想忍受ASP中无继承机制之苦,所以急中生智,也就有了一些成果!
  
  JavaScript根本不支持继承机制!这是肯定的。但是我们可以想办法做些手脚,模拟一个出来。
废话说了一堆,先来看一个例子:

  function Person()
  {
  public: // 注意这个public! 其实没有这样的用法, 这只是我的习惯. 幸好在实际应用中不会有错
  this.GetName=Person_mfGetName;

  private: // 和public一样, 这也是我的习惯
  this.m_strName="Guest";
  }
  function Person_mfGetName()
  {
  return this.m_strName;
  }

  var MyPerson=new Person();
  MyPerson.GetName();

  你可以用任何输出语句来查看结果。当然这只是第一步!
  下面是关键一步:继承!

  function Student() // Extends Class: Person
  {
  EXTENDS: // 我的习惯, 但要切记不能使用小写字母. 因为extends是JavaScript中的保留字
  this.Super=Person; // 定义指向其"父类构造器". 这里的Super也不能用小写形式
  this.Super(); // 调用其"父类构造器". 这样就可以从"父类"那里"继承"所有的属性和方法

  private:
  this.m_nStudentID=0;
  }

  虽然在Student中并没有看到GetName()方法,但是却可以调用。因为他已经继承了Person的GetName()方法。

  var MyStudent=new Student();
  MyStudent.GetName(); // 注意, 调用的是其"父类"的GetName方法, 结果为返回 "Guest".

  关于JavaScript继承实现就是这样。只要牢记两步:
  
  1: 在"子类"中先定义一个指向"父类"的函数(什么名字都可以,我习惯使用Super)
  2: 随后调用这个函数
  
  这样就可以继承"父类"的所有属性和方法!
  
  我现在有些怀疑的是,既然extends和super都是保留字,那为什么JavaScript却不支持继承呢?
  不知道有没有其他更好的办法?希望各位指点...

时间: 2024-08-02 12:14:43

&#106avascript学习:基础继承机制的相关文章

&#106avascript学习:基础继承机制(1)

继承 最近因为学校做网站设计,所以一直在ASP上和数据库上大费苦心. 我在前一个阶段是做Java程序设计的.突然接到任务并学习ASP,所以我一直都热忠并善于利用JavaScript来构架ASP程序. JavaScript的一个明显的优点就在于它可以定义和持有自己的对象.这一点好象是VBScript所无法比拟的. 有了这一点,可以利用JavaScript进行更接近于面向对象的程序设计.也许这将使网站开发更有乐趣... 但有个严重的缺点!JavaScript不支持继承机制.不象Java那样,支持ex

&#106avascript学习:基础继承机制(2)

继承   function Person_mfGetName()  {  return this.m_strName;  }   var MyPerson=new Person();  MyPerson.GetName();   你可以用任何输出语句来查看结果.当然这只是第一步!  下面是关键一步:继承!   function Student() // Extends Class: Person  {   EXTENDS: // 我的习惯, 但要切记不能使用小写字母. 因为extends是Jav

JavaScript学习:基础继承机制

javascript|继承 最近因为学校做网站设计,所以一直在ASP上和数据库上大费苦心. 我在前一个阶段是做Java程序设计的.突然接到任务并学习ASP,所以我一直都热忠并善于利用javascript来构架ASP程序. javascript的一个明显的优点就在于它可以定义和持有自己的对象.这一点好象是VBScript所无法比拟的. 有了这一点,可以利用javascript进行更接近于面向对象的程序设计.也许这将使网站开发更有乐趣... 但有个严重的缺点!javascript不支持继承机制.不象

基于JavaScript实现继承机制之调用call()与apply()的方法详解_基础知识

call() 方法call() 方法是与经典的对象冒充方法最相似的方法.它的第一个参数用作 this 的对象.其他参数都直接传递给函数自身.例如: 复制代码 代码如下: function sayHello(sPrefix,sSuffix) {    alert(this.name + "says" + sPrefix + sSuffix);}; var obj = new Object();obj.name = "Tom"; sayHello.call(obj, &

java学习 java 的继承机制 暑假第三天

final 定义的常量 能在构造函数中初始化  常量我们一般设置为静态的 让所有对象共享这个变量节省内存空间     如果常量是静态的那么 我们再定义的时候就要初始化  因为 静态的常量我们没有初始化赋值 我们要这样   static  final  double PI=3.141592653     java中的继承机制用 exteds标识  ...       java中不允许多重继承    方法的重载发生在一个类 方法的覆盖发生在 基类与子类 java提供了一种访问被覆盖的父类方法的一种机

Javascript继承机制的设计思想

我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承. 我花了很多时间,学习这个部分,还做了很多笔记.但是都属于强行记忆,无法从根本上理解. 直到昨天,我读到法国程序员Vjeux的解释,才恍然大悟,完全明白了Javascript为什么这样

javascript继承机制

  澄清在先,Java 和Javascript是雷锋和雷峰塔的关系.Javascript原名Mocha,当时还叫做LiveScript,创造者是Brendan Eich,现任Mozilla公司首席技术官. 1994年,历史上第一个比较成熟的网络浏览器--Navigator0.9版诞生在网景公司(Netscape),极为轰动. 但是,Navigator0.9只能用来浏览,不具备与访问者交互的能力,比如,用户提交一个数据表单,如果表单为空,浏览器是无法判断的,只能直接提交给服务器端,再把空值的错误返

由JavaScript中call()方法引发的对面向对象继承机制call的思考_javascript技巧

起因: 今天在阅读snandy大神的读jQuery之五(取DOM元素)时,看到有讲到toArray()方法,具体jQuery代码如下: 复制代码 代码如下: toArray: function() { return slice.call( this, 0 ); }, get: function( num ) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object ( n

深入理解MVVM模式中Silverlight的Trigger、Action和Behavior及Silverlight的继承机制

原文:深入理解MVVM模式中Silverlight的Trigger.Action和Behavior及Silverlight的继承机制 接触Silverlight已经有两三个月了,开始一直感觉他和Winform很相似,拖拖控件就行了,所以一直把经历放在了研究后台和服务器交互和性能优化上面,很少去仔细研究Silverlight的页面.前几天,公司突然让修改一个Winform的项目,再回过头来看Winform,有种"不堪回首"的感觉. 十一长假即将来临,在这里先祝大家假期快乐.今天难得有空,