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();
这种方法相当于创建了两个一模一样的静态类。