JavaScript面向对象编程
面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法。这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作。
例如:
<script>
function people(name,sex){
var obj=new Object;
obj.name=name;
obj.sex=sex;
obj.showName=function(){
console.log(obj.name);
}
obj.showSex=function(){
console.log(obj.sex);
}
return obj;
}
var u1=addElement('名字','性别');
var u2=addElement('张','女');
u1.showName();
u2.showName();
u2.showSex();
</script>
面向对象编程(OOP)的特点
- 抽象:抓住核心问题
- 封装:不考虑内部实现,只考虑功能使用
- 继承:从已有的对象上,继承出新的对象
对象的组成
- 方法——函数:过程、动态的
- 属性——变量:状态、静态的
注意
- 不能在系统对象中随意附加方法和属性,否则会覆盖原有的方法和属性。
例如系统原有的Array中,不可以给它附加push()等方法以及length等属性。
工厂模式
什么是工厂模式
- 原料
- 加工
- 出厂
工厂模式
- 用构造函数创建一个类
<script>
function people(name,sex){//构造函数
//原料
var obj=new Object;
//加工(属性)
obj.name=name;
obj.sex=sex;
//加工(方法)
obj.showName=function(){
console.log(obj.name);
}
obj.showSex=function(){
console.log(obj.sex);
}
//出厂
return obj;
}
//使用
var u1=addElement('名字','性别');
var u2=addElement('张','女');
u1.showName();
u2.showName();
u2.showSex();
</script>
工厂模式的问题
- 没有new
- 函数重复定义
解决
使用new来创建对象,系统会自动创建一个空对象
var this=new Object;//原料
//加工
……
……
……
return this;//出厂
原型——prototype
使用prototype给原料加工
function People(name,sex,age){
this.name=name;
this.sex=sex;
this.age=age;
this.showname=function(){
console.log(this.name);
}
this.showsex=function(){
console.log(this.sex);
}
}
People.prototype.showage=function(){
console.log(this.age);
}
var pp=new People('我','男','20');
pp.showage();//20
构造函数和原型一起
function People(name,sex,age){
this.name=name;
this.sex=sex;
this.age=age;
}
People.prototype.showname=function(){
console.log(this.name);
}
People.prototype.showsex=function(){
console.log(this.sex);
}
People.prototype.showage=function(){
console.log(this.age);
}
var pp=new People('我','男','20');
pp.showname();//我
pp.showsex();//男
pp.showage();//20
- 用混合方式构造对象
- 混合的的构造函数/原型方式
- Mixed Constructor Function/Prototype Method
- 原则
- 构造函数:加属性
- 原型:加方法
- 对象命名规范
- 类名首字母大写