什么是面向对象
1. 对象
对象是一个整体,对外提供一些操作。
2. 面向对象:
使用对象时,只关注对象提供的功能,不关注其内部细节。
面向对象是一种通用思想,并非只有编程中能用,任何事情都可以用。
JS中的面向对象
1. 面向对象编程(OOP)的特点
- 抽象:抓住核心问题,把最主要的特征/跟问题相关的特征抽出来。
- 封装:用对象的人不需要考虑内部实现,只考虑功能使用。写对象的人才需考虑内部实现。
- 继承:从已有对象上,继承出新的对象。
2.对象的组成
- 方法——函数:过程、动态的
- 属性——变量:状态、静态的
为对象添加方法和属性
this:
当前的方法属于谁,this就是谁。(the current object the code is being written inside)
(全局的方法属于window)
不能在系统对象中随意附加方法、属性,否则会覆盖已有方法、属性。
原型——prototype
1.什么是原型
- 原型类似于class,修改他可以影响一类元素
- 在已有对象中加入自己的属性、方法
- 原型修改对已有对象的影响
2.为Array添加sum方法
Array.prototype.sum=function (){code};
此时,所有Array类的对象都可以使用sum这个方法(函数)。
- 给对象添加方法,类似于行间样式。
- 给原型添加方法,类似于class。
用构造函数加属性,原型加方法。
function CreatePerson(name, qq) //构造函数
{
this.name=name;
this.qq=qq;
}
CreatePerson.prototype.showName=function () //原型
{
alert('我的名字叫:'+this.name);
};
CreatePerson.prototype.showQQ=function ()
{
alert('我的QQ号:'+this.qq);
};
用混合方式构造对象
- 构造函数:加属性
- 原型:加方法
- 对象命名规范:类名首字母大写
function createPerson(name, qq) //构造函数
{
//系统偷偷替咱们做:
//var this=new Object();
//加工
this.name=name;
this.qq=qq;
//也会偷偷做一些:
//return this;
}
createPerson.prototype.showName=function () //原型
{
alert('我的名字叫:'+this.name);
};
createPerson.prototype.showQQ=function ()
{
alert('我的QQ号:'+this.qq);
};
var obj1=new createPerson('gloucester', '123@gmail.com');
var obj2=new createPerson('张三', '45648979879');
obj1.showName();
obj1.showQQ();
obj2.showName();
obj2.showQQ();
执行上面的代码浏览器会依次弹出四条提示,例:
关于js的对象系统,看到这样一张图。