在面向对象编程中,类是对象的模板,定义了同一组对象(另一说法,又称“实例”)共有的属性和方法。Javascript语言不支持“类”,但是可以使用一些变通的方法来模拟出类。Javascript中定义类有三种方式,下面就简单说一下。
方式一: 构造函数法
这是Java语言学习中,教科书上必教的方法。如下面的一段代码:
function Student(stuNo, stuName){
this.stuNo = stuNo;
this.stuName = stuName;
}
生成实例的时候,使用new关键字,如:var stu = new Student("stu00001", "小柿子"); 另外类的属性和方法还可以定义在构造函数的prototype对象之上,如下代码:
Student.prototype.study = function(){
console.log("I'm studying");
}
这种方式用到了this和prototype对象,不易阅读,编写也较复杂。
方式二:Object.create()法
为了方便生成对象,出现了Object.create()对象法。原理是根据“类”就是一种对象,而不是函数。如下面的一段代码:
var student = {
stuNo: 'stu0001',
stuName: '小柿子',
study: function(){
console.log("I'm studying");
}
};
var stu = Object.create(student);
console.log(stu.stuName);
stu.study();
这种方式是不是比较第一种方式,更加灵活了吧,而且阅读性也不错吧。这种方法虽然简单,但是不能实现私有属性和私有方法,实例直接也不能共享数据,对“类”的模拟不够全面。
方式三:极简主义法
这种方法,不用使用this和prototype对象,也不用使用Object.create()法来生成对象。下面直接看代码:
var student = {
newInstance: function(){
var stu = {
stuNo: 'stu0006',
stuName: 'erbin',
study: function(){
console.log("I'm studying");
}
};
return stu;
}
}
var stu = student.newInstance();
stu.study();
使用这种方式, 类的继承也比较简单了,如下:
var address = {
newInstance: function(){
var addr = {
getAddr: function(){console.log("山东省菏泽市")}
};
return addr;
};
};
var student = {
newInstance: function(){
// 继承
var stu = address.newInstance();
stu.stuName = 'erbin';
stu.study = function(){
console.log("I'm studying");
};
return stu;
}
}
var stu = student.newInstance();
stu.getAddr(); //获取学生erbin的地址
对于私有属性和方法,只用你不把属性和方法定义在stu对象上面,都是私有的。
大家看了这个是不是了解了呢。