面向对象:万物皆对象
(电脑){
声卡:(属性名) 可以换掉(属性值)
cpu:
键盘:
屏幕:
}
1.基础模式
var web2101=[{
name:'',
age:20,
gender:'men',
tel:xxxx,
address:'',
专业:xxx
},{
name:'',
age:20,
gender:'men',
tel:xxxx,
address:'',
专业:xxx
},{
name:'',
age:20,
gender:'men',
tel:xxxx,
address:'',
专业:xxx
},....];
2.工厂模式
function createStudent(name,age,gender){
var obj=new Object();
obj.say=function(){}
obj.name=name;
obj.age=age;
obj.gender.gender;
return obj //内部声明的obj想要在外部调用 返回obj即可
}
var stu1=createStudent("lisi",20,'men');//{name:,age:,gender:,say:}
var stu2=createStudent('tom',30,'women');
优点:简化了基础模式的代码量
缺点:
1.对象不能细分
2.浪费内存(内置函数)
解决2.:
将共有函数声明在工厂函数外部,在函数内部将指针指向共有函数
3.构造函数模式
new Object()
new Array()
new Date()
function Student(name,age,gender){
//this->student:name
this.name=name;
this.age=age;
this.gender=gender;
}
var stu1=new Student('lisi',20,'men');
优点:
解决对象细分问题
缺点:
公有属性/方法 外置
4.原型模式
将所有共有的属性和方法存放在构造函数的原型对象中
所有的实力对象能够调用,以及构造函数的原型对象也能调用
function Student(name,age){
this.name=name;
this.age=age;
}
Student.prototype.say=function(){
alert("say------");
}
var stu1=new Student("lisi",20);
var stu2=new Student('tom',30);
5.继承
父类
子类
子类的原型指向父类的实例
父类的实例指向子类的构造函数(将子类的constructor属性指向子类构造函数)
Poor.prototype=new Rich();
Poor.prototype.constructor=Poor;
6.借用构造函数
Rich.call(this,name,age);