JS面向对象
创建多个对象,可以使用
1.工厂模式
function createStudent(){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.say = function(){
alert("say-----");
}
return obj;
}
//创建多个对象
var stu1 = createStudent("lisi",20);
var stu2 = createStudent("lisi",20);
var stu3 = createStudent("lisi",20);
stu1.say == stu2.say; //false
优点:简化重复代码操作
缺点:
1.对象不能细分
2.对于公有属性和方法的存放,浪费内存空间
为了解决工厂模式第一个缺点,将工厂模式优化,得出了构造函数模式
2.构造函数模式
function Student(name,age){
this.name=name;
this.age=age;
this.say=say;
}
var stu1 = new Student("lisi",20);
var stu2 = new Student("tom",20);
stu1.constructor;//Student
stu1.say == stu2.say; //true
但是这时还没能解决第二个缺点,故
3.原型模式
将所有实例对象的共有属性和方法存放在构造函数的原型对象中
function Student(name,age){
this.name=name;
this.age=age;
}
Student.prototype.say=function(){}
//Student.prototype={ //{}是new Object 这个会覆盖上面的prototype,所以这时stu1,stu2调用不了say方法
construction:Student, //因为stu1指向Object,所以这时stu1要指回Student,所以Object的constructor指向Student
run:function(){}}
var stu1=new Student();
var stu2=new Student();
4.继承
子类的原型指向父类的实例对象
父类的实例对象指向子类的构造函数