`

非构造函数继承_解决Javascript不能继承基类静态方法和静态变量

 
阅读更多
<html>
<head>
<title>非构造函数继承_解决Javascript不能继承基类静态方法和静态变量</title>
</head>

<body>

</body>
<script language="javascript">
  var People = 
  {
  nation:'中国'
 };

  var Doctor =
  {
   career:'医生'
 }

  //json格式的发明人Douglas Crockford,提出了一个object()函数,可以做到这一点。
 function object(o) 
  {
   function F() {}
  F.prototype = o;
  return new F();
 }
  //这个object()函数,其实只做一件事,就是把子对象的prototype属性,指向父对象,
  //从而使得子对象与父对象连在一起。使用的时候,第一步先在父对象的基础上,生成子对象:
 // var Doctor = object(Chinese); 然后,再加上子对象本身的属性:
 // Doctor.career = '医生'
  //这时,子对象已经继承了父对象的属性了。
 // alert(Doctor.nation); //中国
  
  
  //浅拷贝
  function extendCopy(p) 
  {
  var c = {};
  for (var i in p) 
    { 
   c[i] = p[i];
  }
  c.uber = p;
  return c;
 }

  //深拷贝
  function deepCopy(p, c) 
  {
  var c = c || {};
  for (var i in p) 
    {
   if (typeof p[i] === 'object') 
      {
     c[i] = (p[i].constructor === Array) ? [] : {};
    deepCopy(p[i], c[i]);
   } 
      else 
      {
     c[i] = p[i];
   }
  }
  return c;
  }
  
  
  //参见 非构造函数的继承
  //http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html
  //上面深拷贝方式实现的是对象继承.
  
  /*************************************************************************************************/
  
  //定义这个基类
  function Person()
  {
    this.type = "Human"; 
  }
  //这里Person是一个对象
  
  //静态变量
  Person.mouth = 1;
  Person.sayHello = function()
  {
    alert("Hello"); 
  }
  
  //定义一个子类
  function Chinese()
  {
    this.type = "Chinese";  
  }
  
  //因为使用function定义了Person和Chinese类后,Person和Chinese就分别表示两个对象
  //于是可以使用下面浅拷贝的方式继承基类的 静态变量和方法了
  //for(obj in Person)
  //{
  //   Chinese[obj] = Person[obj];
  //   console.log(Person[obj]);
  //}
  //但是为了防止静态变量是数组,所以使用深拷贝方式 继承静态变量和方法
  
  deepCopy(Person,Chinese);
  
  Chinese.sayHello(); //已经继承了基类的 静态方法
  console.log(Chinese.mouth); //继承了基类的静态变量
  
  var aChinese = new Chinese(); //依然可以使用这样的方式创建对象
  console.log(aChinese);
  
</script>
</html>

 

分享到:
评论

相关推荐

    在派生类的构造函数中调用基类的构造函数

    《Visual C++2012入门经典(第6版)》实例,在派生类的构造函数中调用基类的构造函数

    继承类的构造函数

    详细介绍了继承类的构造函数,基类的构造函数是不能继承的,在声明派生类时,派生类并没有把基类的构造函数继承过来,因此,对继承过来的基类成员初始化的工作也要由派生类的构造函数承担。

    C++ 虚继承对基类构造函数调用顺序的影响

    而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较大。  首先,虚拟继承与普通继承的区别有:  假设derived 继承自base类,那么...

    继承带参数的构造函数的使用

    声明一个带参数的构造函数,该构造函数继承基类base中的带参数的构造函数

    C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar

    C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar

    C#多态性实例,向基类构造函数传递参数.rar

    C#多态性实例,向基类构造函数传递参数.rar 非本人做 支持站内免资源分化 希望对大家有用。

    C++ 课程作业 继承与派生 (motorcycle类设计(虚基类))

    声名一个基类vehicle,有私有成员maxspeed和weight,公有成员run()和stop(),以及构造和析构函数。 从vehicle派生bicycle和motorcar, bicycle有私有成员height, motorcar有私有成员seatnum,以及各自的构造函数和析构...

    Java继承时构造函数的调用

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    C# 静态构造函数使用

    当我们想初始化一些静态变量的时候,需要用到静态构造函数了。这个静态构造函数属于类,而不属于实例,是说这个构造函数只会被执行一次,即:在创建第一个实例或引用任何静态成员之前,由.NET自动调用。  现在碰到...

    C#中派生类调用基类构造函数用法分析

    主要介绍了C#中派生类调用基类构造函数用法,实例分析了派生类调用基类构造函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    多重继承--虚基类工程代码

    且构造函数和析构函数的调用顺序和单继承是一样的,先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么处于同一层次的各个基类构造函数的调用顺序是取决于声明派生类时所指定的各个基类...

    C#定义基类并重写基类方法计算图形面积和周长的windows界面程序

    2.定义Shape类的派生类三角形Tangle,使用base关键字调用基类构造函数,重写Shape类继承的虚方法:求面积虚方法Mianji(),求周长虚方法Zhouchang()。 3.定义Shape类的派生类圆形Circle,重写Shape类继承的虚方法:...

    C#静态构造函数用法实例分析

    这个静态构造函数属于类,而不属于实例,就是说这个构造函数只会被执行一次,即:在创建第一个实例或引用任何静态成员之前,由.NET自动调用。 现在碰到这样一个场景:提供一个静态方法,这个静态方法在不同的地方...

    实验4继承与派生(4学时)

    (2)定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 (3)定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此...

    多继承与虚基类

    1, 设计一个人员基类person类,包括描述基本信息的数据成员,提供基本操作的函数成员以及析构函数和不同形式的构造函数

    多重继承与虚基类

    c++多重继承与虚基类的ppt 讲细致 易懂

    C#多态性实例,向基类构造函数传递参数

    C#多态性实例,向基类构造函数传递参数。

    虚基类与虚函数

    虚基类与虚函数 虚基类的概念 ... 在C++语言中,一个类不能被多次说明为一个派生类的直接基类,但可以不止一次地成为间接基类。这就导致了一些问题。为了方便 说明,先介绍多继承的“类格”表示法。

    C++基类指针和派生类指针之间的转换方法讲解

    函数重载不能通过函数的返回类型来区分,因为在函数返回之前我们并不知道函数的返回类型。 函数隐藏和函数覆盖只会发生在基类和派生类之间。 函数隐藏是指派生类中函数与基类中的函数同名,但是这个函数在基类中并...

    多继承和虚基类PPT

    C++实例关于多继承和虚基类PPT多继承和虚基类PPT

Global site tag (gtag.js) - Google Analytics