javascript 面向对象 (类)

c#/php/java/python ,平时开发中会接触多种语言,但是作为一个webapplication开发者,接触最多却最被忽视的是javascript。

再学习每一门语言,会无意中第一时间去了解该语言面向对象的特点,然而却一直忽视javascript的面向对象的特点。近日查阅相关资料对javascript的面向对象重温。

javascript对类的定义很特别。不同于其他面向对象的语言,js是每有class关键字的,静态类与非静态类的定义也有很大差别,另外继承也不一样。

 

非静态类的定义:

 

function BaseObject(){
     this.name='my object';
     this.func=function(){alert('i am func')};               
}

类的关键字还是function,跟定义一个函数或方法是一样的,使用this作为定义属性和方法的内部指代变量。

使用:

var object = new BaseObject();

alert(object.name);   //使用属性 
alert(object['name']); //使用索引器也可以调用到属性 object.func();     //使用方法

再使用的时候,通过new 关键字创建类的实例,然后可以再这个实例的变量上直接使用之前用this定义的属性和方法。

 

那么如果在定义类的时候混入平时写js代码时的那些方式会如何? 例如 var a=‘123’;alert(‘456’);

这样写的话,这部分代码就不属于属性或者方法了,只会被调用BaseObject()的时候直接运行出来而已。 

静态类:

很有趣,不是用关键字来定义,并且也不需要function来定义,方法属性不是用=号来指定,也不需要用this变量,属性和方法的分割符号也不是;号而是,号,更象是定义对象的枚举。

定义:

var  obj= {
	a:'aaa',
	b:'bbb',
	c:function(){alert('i am func');}
}

没有关键字,直接用{}就可以了,由于是静态的,没有名称,所以一旦创建就立即用变量保存,以便以后使用。

使用:

alert(obj.a);
alert(obj['b']);
obj.c();

直接调用即可。

 

静态类是在{}中的,也就是说{}就是一个实体对象(不是类,是一个对象),因此可以将他作为返回值对上面得代码进行优化

function getObj(){
    return {
          a:'aaa',
          b:'bbb',
          c:function(){alert('i am func');
        }
  }

这样,就可以比较简单的通过调用 getObj()将静态类付给不同的变量了  

var o1=getObj();

var o2=getObj();

这种方法相当于创建了两个一模一样的静态类。

 

 

 

 

 

posted @ 2012-09-20 21:25  ZetaChow晓代码  阅读(269)  评论(0编辑  收藏  举报