<script>
//JS创建对象的两种形式:
//1:对象字面量
var o = {name : 'Jack', age : 18};
//这一种形式就像是构建一个JSON,这种形式创建出来的对象
//相当于通过Object这个构造函数new出来的对象
//2:构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person('Lucy', 18);
//这种形式创建对象跟很多其他语言都有点相似,它是通过new关键字创建出来的对象,
//new 关键字后面紧跟着的是构造函数,这很像JAVA,不过JAVAnew对象是通过类的
//构造函数创建的,但是JS没有类
//下面来个小练习:
/*
1、创建一个学生类,里面有名字、年龄、性别属性
2、创建一个班级类,里面有名字属性;
3、班级有一个add方法,可以添加学生
4、有一个findStuBySex方法,可以通过性别获取学生
5、有一个findStuByAge方法,可以通过年龄获取学生
*/
//学生类
function Stu(sname, sage, ssex) {
this.sname = sname;
this.sage = sage;
this.ssex = ssex;
}
//班级类
function Cls(cname) {
this.cname = cname;
//定义一个数组,用来封装添加的学生
this.stus = [];
}
//添加学生的方法
Cls.prototype.addStu = function(stu) {
//将学生添加到班级
this.stus.push(stu);
}
//通过性别获取学生的方法
Cls.prototype.findStuBySex = function(ssex) {
//判断班级是否有学生
if(this.stus != null || this.stus.length > 0){
//用来封装查询出来的学生
var stuArray = [];
//遍历班级学生
for(var i = 0; i < this.stus.length; i ++){
//判断学生性别
if(this.stus[i].ssex == ssex){
//将查出来的学生添加到数组
stuArray.push(this.stus[i]);
}
}
//将查询数据返回
return stuArray;
}
}
//通过年龄获取学生的方法
Cls.prototype.findStuByAge = function(sage) {
if(this.stus != null || this.stus.length > 0){
var stuArray = [];
for(var i = 0; i < this.stus.length; i ++){
if(this.stus[i].sage == sage){
stuArray.push(this.stus[i]);
}
}
return stuArray;
}
}
//获取一个班级对象
var cls = new Cls("前端");
//获取学生对象
var stu1 = new Stu("cqf", 19, "男");
var stu2 = new Stu("sap", 18, "女");
var stu3 = new Stu("ch", 18, "女");
var stu4 = new Stu("yjl", 19, "男");
//添加学生
cls.addStu(stu1);
cls.addStu(stu2);
cls.addStu(stu3);
cls.addStu(stu4);
//用来封装返回的学生数组
var stuArray;
//通过性别获取学生
stuArray = cls.findStuBySex("男");
//控制台输出结果
console.log(stuArray);
stuArray = cls.findStuBySex("女");
console.log(stuArray);
//通过年龄获取学生
stuArray = cls.findStuByAge(18);
console.log(stuArray);
stuArray = cls.findStuByAge(19);
console.log(stuArray);
/*
JavaScript创建没有类,至少目前是没有的。上面案例中所说的类只是概念中的类,通过JS的动态性,
动态给班级原型对象(prototype)添加几个方法(addStu(),findStuByAge(),findStuBySex())。
*/
</script>