Javascript创建类和对象详解

  

现总结一下Javascript创建类和对象的几种方法:

  

1,原始的创建方法:

        & lt;脚本type=" text/javascript祝辞   var人=新对象();   person.name=鞍住?   person.sex=芭恕?   person.show=function () {   文档。写(“名字是:“+ this.name +”;性是:“+ this.sex);   }   person.show ();   & lt;/script>      之前      

原始的创建方法对于熟悉面向对象的人来说难以接受,总感觉属性和方法的封装不是很紧密,这种封装是以“对象名”+“。”的方式进行,表示对象名后跟的属性和方法是这个对象拥有的东西,这个对象(例如:人)就是封装好的结果,你可以继续追加方法和属性,例如追加年龄属性:person.age=23;这种创建方法会让熟悉Java编程的人感到很难受。我们可以对原始的创建方法进一步”封装”一下,请看下一步:

  

2,工厂方法模式:

        & lt;脚本type=" text/javascript祝辞   函数personFactory(姓名、年龄、性别){   var ob=新对象();   ob.name=名称;   ob.age=年龄;   ob.sex=性;   ob.show=function () {   document . write (ob.name + " " + ob。年龄+ " " + ob.sex);   }   返回ob;   }   var人=personFactory(“艾米”,21岁的“女人”);   person.show ();   & lt;/script>      之前      

工厂方法模式看起来更像一个类了,personFactory对原始的创建方法进行了封装,并将创建好的对象返回给人引用变量,人就可以引用这个创建好的对象了,但是还不够完美:你每一次创建一个对象,并使用该对象调用显示()方法时,都会创建新的显示()函数,它们完全可以调用同一个展示方法,优化方法是将显示放到工厂外,如下:

        & lt;脚本type=" text/javascript祝辞   函数显示(){   document . write (this.name + " " +。年龄+ " " + this.sex);   }   函数personFactory(姓名、年龄、性别){   var ob=新对象();   ob.name=名称;   ob.age=年龄;   ob.sex=性;   ob.show=显示;   返回ob;   }   var人=personFactory(“艾米”,22日,“女人”);   person.show ();   & lt;/script>      之前      

从功能上说,上面的代码解决了函数重用问题,但是呈现方式不像是创建一个对象,熟悉Java的人仍感到难受。请看下一步:

  

3,构造方法模式:

        & lt;脚本type=" text/javascript祝辞   函数的人(姓名、年龄、性别){   this.name=名称;   this.age=年龄;   this.sex=性;   this.show=function () {   document . write (this.name + " " +。年龄+ " " + this.sex);   document . write (“& lt; br>”);   }   }   var/=新人(“艾米”,22日,“女人”);   per.show ();   & lt;/script>      之前      

上述代码的创建方式已经与Java类和对象的创建方式几乎一样了,封装好类的属性和方法,然后利用新关键字创建并返回一个对象,这不就是Java创建类和对象的过程吗,是的,就是这个过程,但是还可以优化,这种方式创建的对象调用显示方法是也会即时地创建一个证明函数,我们能不能创建一个所有对象公用的一个方法呢?就像Java类中静态的方法一样,所有对象都使用同一个静态的方法,答案是可以的。请看下一步:

  

4,动态原型方法:

        & lt;脚本type=" text/javascript祝辞   函数的人(姓名、年龄、性别){   this.name=名称;   this.age=年龄;   this.sex=性;   如果(typeof的人。标签==岸ㄒ濉?{   Person.prototype.show=function () {   document . write (this.name + " " +。年龄+ " " + this.sex);   document . write (“& lt; br>”);   }   Person.tag=true;   }   }   var/=新人(“彼得”,22日,“男人”);   per.show ();   & lt;/script>      之前      

这里使用了一点技巧,当用新的创建对象是,会执行人功能块中的如果判断语句,顺序从上往下,刚开始标签变量当然没有定义,所以执行如果语句块里的内容:

        Person.prototype.show=function () {   document . write (this.name + " " +。年龄+ " " + this.sex);   document . write (“& lt; br>”);   }      之前      

这段内容的含义是创建一个属于类人的显示方法,注意,它是一个类方法,相当于Java中静态修饰后的方法,而非单个对象的方法,这样所有的对象均可调用同一个方法了,这样也不用每次不同对象调用方法是都创建自己的证明函数了,既节省空间又节省时间,这种方法岂不更妙。这里解释一下,以“类名.prototype。属性/方法”方式构造的属性和方法相当于Java中用静态修饰的变量或方法,是属于整个类的,而非单个的对象,也即所有对象是共享的。

Javascript创建类和对象详解