javascript面向对象(一)封装,this,原型

7 篇文章 0 订阅
7 篇文章 0 订阅

面向对象

什么是面向对象呢,其实在聊面向对象时还得提一下 面向过程。怎么又面向过程了,这又是什么鬼。

其实面向对象面向过程都 只是一种编程方式,即是一种解决问题的方法。相对来说面向过程比较简单明了。

我们在还没有学习面向对象时,我们所编写的程序的方式就是 面向过程的。

面向过程的方式就是一步一步从头到尾地写的。需要什么功能就写什么程序的。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次。

难道这不就是一次封装,到处使用吗?

 

本人理解能力有限,如有错误地方请指出,请勿骂!谢谢

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值