javascript 写类方式之六

  6、Prototype.js的写类方式

  

复制代码 代码如下:

  //prototype.js中的代码

  var Class = {

  create: function() {

  return function() {

  this.initialize.apply(this, arguments);

  }

  }

  }

  //简化后的

  function Clazz() {

  return function(){

  this.initialize.apply(this,arguments);

  }

  }

  如下步骤写一个类,

  

复制代码 代码如下:

  //类名Person

  var Person = Class.create();

  //通过原型重写来定义Person

  Person.prototype = {

  initialize : function(name) {

  this.name = name;

  },

  getName : function() {

  return this.name;

  },

  setName : function(name) {

  this.name = name;

  }

  }

  //创建对象

  var p = new Person("jack");

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

  initialize完成对象的初始化(相当于构造函数),方法依次往下写即可。

  有个问题,通过这句p.constructor == Person为false可以看到,这正是Prototype.js一个小小的缺陷。原因是重写了Person的原型。为了使constructor能指向正确的构造器,只需在原型重写时维护好constructor属性即可。

  

复制代码 代码如下:

  Person.prototype = {

  constructor : Person,//注意这里

  initialize : function(name) {

  this.name = name;

  },

  getName : function() {

  return this.name;

  },

  setName : function(name) {

  this.name = name;

  }

  }

  好了,这时候p.constructor == Person就是true了。