日期:2014-05-16 浏览次数:20352 次
?
JavaScript是一种功能强大的语言,起初它只是用于在浏览器中完成一定的Dom操作和特殊效果。随着AJAX和RIA技术的广泛普及,JavaScript发挥了越来越重要的作用,JavaScript的代码量越来越大,对可维护性的要求也越来越高。JavaScript提供了特有的类机制,但是在语法习惯上与传统面向对象的语言有很大的不同,这使得不少的JavaScript开发人员感到困惑,本文将会对JavaScript常见的类功能进行介绍。
1.JavaScript定义类及实例化
在JavaScript的语法中,并没有类似于Class的类定义关键字,而是使用与普通方法一样的function来定义类,所以定义普通的方法与定义类有着类似的语法(这使得刚接触JavaScript的开发人员会感到很难理解,关于如何判断function是要作为类的定义,可以查看这篇文章。)
?
//定义一个普通方法 function testSimpleFunction(){ alert("This is a simple function!"); } testSimpleFunction();//调用方法 //定义一个类 function Person(name,age){ this.name = name; this.age = age; this.aboutMe = function(){ alert("I’m a person!My name is "+this.name+",My age is "+this.age+"!") } } var personObject = new Person("levin",30);//实例化该类,得到一个对象 personObject. aboutMe();//调用对象的方法
?
?JavaScript是基于原型的语言,每个类(即构造函数)都有一个prototype属性指向该类对应的原型对象,而实例化得到的对象会拥有该类原型中的属性和方法。常用的定义类的方式如下:
?
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.sayHello = function(){ alert(this.name); } var person = new Person("levin",30); person.sayHello();//调用原型中的方法
?
?对象在进行属性和方法访问时,首先会在对象内部查找,如果找不到,会在其构造函数原型中进行进一步的查找。基于这样的机制,对象从原型得到的属性和方法可以进行重写覆盖,对象就拥有与原型同名的属性和方法,而对于通过此类实例化的其它对象,则不会受其影响:
?
person.sayHello = function(){ alert("My own name is "+this.name); } person.sayHello(); var anotherPerson = new Person("zhangwb",30); anotherPerson.sayHello();
?在本例中,person对象和anotherPerson对象尽管都是通过Person