面向对象
什么是面向对象呢,其实在聊面向对象时还得提一下 面向过程。怎么又面向过程了,这又是什么鬼。
其实面向对象和面向过程都 只是一种编程方式,即是一种解决问题的方法。相对来说面向过程比较简单明了。
我们在还没有学习面向对象时,我们所编写的程序的方式就是 面向过程的。
面向过程的方式就是一步一步从头到尾地写的。需要什么功能就写什么程序的。C语言就是最好的例子。
面向对象的方式就是先把功能写好,给他一个名字。然后就可以在程序的其他位置使用他的名字,其实就是在使用已经写好了的功能。很方便
比如:电脑,电视,手机,汽车,电风扇......这些东西你都可以理解为对象,里面是如何实现的你不需要知道,你只要知道如何开机如何使用各种功能就行了。
Array,Date,Number.....这些都是js的内置对象。
javascript的面向对象:
js的面向对象有三个特性:封装,继承,多态
封装:那什么是封装,我们可以理解为,把这个功能所需要的东西全部打包到一个函数里面,然后用逻辑将这些东西做成 某些功能。这就是封装。
那如何创建一个对象呢!因为在es6前是没有class的(这里暂不说es6)
es6之前是通过构造函数来创建对象的,那什么又是构造函数呢,其实构造函数和平时用的这些个函数一样,只不过多了一个特殊功能,这个特殊功能就是可以创建对象。
基本的写法,如下:
function obj () // 构造函数
{
var obj = new Object() // 创建一个空对象
// 属性
obj.na = '小明';
obj.ag = '12';
// 方法
obj.geto=function ()
{
console.log(obj.na);
}
return obj; // 返回空对象
}
var a = new obj; // 实例化对象
a.geto(); // 调用对象方法
输出如下:
还可以进一步改写成:
function obj ()
{
this.na = '小明';
this.ag = '12';
this.geto = function ()
{
console.log(this.na);
}
}
var a = new obj();
a.geto();
输出如下:
this 就是实例化对象后的这个对象,上面的例子中,this就是指这个a。
在上面创建的对象中,是把属性和方法都写到了构造函数里面的。
其实是可以用原型(prototype)把方法添加到对象中的。那原型又是什么东东呢?
我们可以先看它的用法是怎么的,改写上面的例子:
function obj () // 构造函数
{
// 属性
this.na = '小明';
this.ag = '12';
}
// 用原型为对象添加方法
obj.prototype.geto = function()
{
console.log(this.na);
}
// 实例化及调用
var a = new obj();
a.geto();
输出如下:
这就是原型(原型当然不只是有这点作用,还有其它功能的)
那这种面向对象编程有什么好处呢
再写个例子:
function obj (name,age) // 构造函数
{
// 属性
this.na = name;
this.ag = age;
}
// 用原型为对象添加方法
obj.prototype.geto = function()
{
console.log(this.na);
}
// 实例化及调用
var a = new obj('小明',13);
var b = new obj('小红',9);
var c = new obj('小黑',10);
var d = new obj('小黄',11);
var e = new obj('小白',14);
a.geto();
b.geto();
c.geto();
d.geto();
e.geto();
输出如下:
他的好处就是你只要把参数放进去就可以用了。
如果上面的例子用面向过程来写的话,你要写5次。
难道这不就是一次封装,到处使用吗?
本人理解能力有限,如有错误地方请指出,请勿骂!谢谢