日期:2014-05-16  浏览次数:20324 次

javascript类机制

?

JavaScript是一种功能强大的语言,起初它只是用于在浏览器中完成一定的Dom操作和特殊效果。随着AJAXRIA技术的广泛普及,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