在javascript中一切皆对象。在js中面向对象编程可以通过两种方式实现,一种是用函数作为构造函数的构造函数方式,另外一种是直接用JSON来实现的非构造函数方式。
这篇文章主要是采用构造函数方式实现。
基本的实现方式:
<script type="text/javascript">
function Person(name, age) {
//私有属性
var verson = '1.1.0';
//公有属性
this.name = name;
this.age = age;
//公有方法
this.say = function() {
alert( "I'm " + this.name );
};
this.getverson = function() {
alert( verson );
};
}
var p = new Person('koma', 21);
p.say(); //I'm koma
p.getverson(); //1.1.0
console.log(p.age); //21
</script>
通过上面的可以看出Person函数现在既可以把它看做是类,同时它有是类的构造方法。其实这样就和php中一样了,当类中方法名和类名相同时则该方法就是该类的构造函数。
基本的创建类的方法明确之后,我们还需要注意一个js中特有的点,那就是在js的面向对象中我们可以随时动态的给类增加属性或者方法,而且通过不同的方式增加来的属性或者方法调用的方式也不同,对于直接通过构造函数名(类名或者函数名)增加的属性或者方法我们可以想象成是php类中的静态方法,因为这种方法或者属性只能通过类名调用,如下:
Person.prototype.nihao = function() { //通过原型增加
alert( 'nihao' );
}
Person.hello = function() { //直接通过函数名增加
alert( 'hello' );
}
var p = new Person('koma', 21);
Person.hello();
p.hello(); //错误
p.nihao();
Person.nihao(); //错误
其中通过原型的方式来扩展类的方法是常用的方法而且也是js中面向对象编程的精髓,这个东西就留着后面的文章继续学习吧,说难也不难,说简单也不是那么的简单。