简单的JS多重继承示例

复制代码 代码如下:

  $defined = function (v) {

  return v != undefined;

  }

  Class = function () {

  var base = {};

  for (var k=0; k<arguments.length; k++) {

  //{{new arguments[k]() with custom constructor field.

  var o = arguments[k].prototype;

  o.constructor = arguments[k];

  arguments[k].call(o);

  //}}

  for (key in o) base[key] = o[key];

  }

  function Klass () {

  // for every class one object cache.

  var clso = null;

  function klass() {

  if (arguments.length<=0 && clso!=null) {

  // hit cache.

  return clso;

  }

  if ($defined(this.constructor.init)) {

  // use init() for class initialization.

  this.constructor.init.apply(this, arguments);

  }

  clso = this;

  }

  klass.prototype = base;

  return klass;

  }

  return Klass();

  }

  A = new Class();

  A.init = function () {

  this.x = 400;

  this.y = 300;

  }

  B = new Class(A);

  B.init = function () {

  this.y = 200;

  this.z = 100;

  }

  C = new Class(B);

  C.init = function () {

  this.z = 0;

  }

  c = new C();

  alert(c.x);

  alert(c.y);

  alert(c.z);