javascript 写类方式之十

10、mootools.js的写类方式

  mootools.js的最新版本是1.2.3,这里使用的是1.2.0。mootool被设计成非常紧凑的,模块化的,面向对象的的js库。mootool中写类用Class类。Class类由Native类new出来的:

  

复制代码 代码如下:

  /*

  *Script: Class.js

  */

  var Class = new Native({

  name: 'Class',

  initialize: function(properties){

  properties = properties || {};

  var klass = function(empty){

  for (var key in this) this[key] = $unlink(this[key]);

  for (var mutator in Class.Mutators){

  if (!this[mutator]) continue;

  Class.Mutators[mutator](this, this[mutator]);

  delete this[mutator];

  }

  this.constructor = klass;

  if (empty === $empty) return this;

  var self = (this.initialize) ? this.initialize.apply(this, arguments) : this;

  if (this.options && this.options.initialize) this.options.initialize.call(this);

  return self;

  };

  $extend(klass, this);

  klass.constructor = Class;

  klass.prototype = properties;

  return klass;

  }

  });

  Native方法是mootools中一个非常重要的方法,很多类都用它去组装。如Window,Document,Event。当然还有这里的Class,导入mootools后我们写类时只需要用Class就行了。一个Person类:

  

复制代码 代码如下:

  /**

  * Person类

  * @param {Object} name

  */

  var Person = new Class({

  initialize: function(name){

  this.name = name;

  },

  setName : function(name) {

  this.name = name;

  },

  getName : function() {

  return this.name;

  }

  })

  //new一个对象

  var p = new Person("jack");

  //测试set,get方法

  console.log(p.getName());//jac

  p.setName('andy');

  console.log(p.getName());//andy

  //测试instanceof及p.constructor是否正确指向了Person

  console.log(p instanceof Person); //true

  console.log(p.constructor == Person); //true

  Native实际上只是一个普通函数,它通过所传参数组装了一个类(function),最后返回该类(function)。既然Native是函数,函数调用的方式是(),call,apply。但在mootools中却用new Native(obj)方式。为何?原因只是使Native看起来更像一个类而已。