面向对象
扩展面向对象术语
OOA面向对象分析
OOD面向对象设计
OOP面向对象编程
对象的创建方式
1、字面量的创建方式
var obj = {
}
缺点:多个同类对象创建时代码重复
2、使用工厂模式创建对象(设计模式之--工厂模式)
定义一个工厂
function student(name){
备料--创建一个对象
var obj = {
}
加工--为创建的对象添加属性方法
obj.name = name;
出厂--返回对象
return obj;
}
创建对象 通过函数调用
var stu1 = student("asdg");
alert(stu1);
优点 : 能解决多个同类对象创建时代码重复
缺点 : 对象是通过函数调用的方式创建的 (不规范)
不能确定某个对象属于哪一个类(构造函数)
[判断一个对象属于哪一个构造函数 instanceof
console.log( stu1 instanceof Object )]
3、使用构造函数创建对象
构造函数命名一般是大驼峰 为了和普通函数进行区分
构造函数中的属性称为实例属性 构造函数中的方法称为实例方法
构造函数中的this指向构造出来的属性
function Student(name,tel){
this.name = name;
this.tel = tel;
this.study = function(){
this.name + "学习";
}
}
var stu1 = new Student();
var stu2 = new Student();
console.log(stu1.name);
优点 : 解决了上述问题
缺点 : 多个同类对象的方法会被重复创建 空间不共享
4、使用构造函数创建对象(方法和属性都是原型属性和原型方法)
function Student(){
}
原型属性
Student.prototype.name = "faasf";
原型方法
Student.prototype.studt = function(){
return this.name + "在学习";
}
var stu1 = new Student();
var stu2 = new Student();
console.log(stu1.study == stu2.study);
优点 : 能够解决多个同类对象创建史空间不共享问题 原型方法空间共享
缺点 : 属性不能更改
5、混合
function Student(name){
this.name = name;
}
原型方法
Student.prototype.studt = function(){
return this.name + "在学习";
}
var stu1 = new Student();
var stu2 = new Student();
console.log(stu1.study == stu2.study);
优点 : 解决了上述所有问题
缺点 : 不规范