Javascript面向对象

一、面向对象和面向过程

  • 面向过程
    着重于解决问题的步骤,明确其解决的步骤,一步步去实现。着眼于局部和具体。
  • 面向对象
    着重于一种解决的思维,建立对象是为了更好的解决问题的行为。更注重于整体。

面向对象是一种思维方法,编程方法,而且也不针对于某种编程语言。一种编程的思想


二、面向对象的基本特性

继承:某一个类继承另一个类,则具备另一个类的属性和方法
多态:不同的相同方法中有不同的表现形式
封装:将客观事物封装成抽象或具体的对象,一个类中可以封装其内部的属性和方法,选择性的公开对应的属性和方法


三、对象

Java中的对象,指的是从一个类的基础上建立一个对象
Javascript中的对象,指的是在一个对象的基础上创建一个对象

Javascript对象

依靠构造器(construstor)和利用原型(prototype)构造出来的。这里有必要学习一下什么是原型链。


四、创建对象

如果学过java的hashmap,或者看过json数据的都知道,数据由键值对组成。那么javascript对象的创建,可以理解以键值对的形式存在,即字面量。
创建一个javascript的对象很简单。比如:

var a={
    name:"xiaoming",
    age:18,
    say:function(){
        console.log("Hello world!");
    }
}

java和javascript的一个很明显的区别就是,javascript不需要每次都需要声明一个变量是什么类型的。
在上述代码中,name是属性名,xiaoming则是属性值,同样的age是属性名,而18则是属性值,同样的,方法的定义也是如此,say为属性名(方法名),function()则是方法体,可添加参数。调用的时候,只需要简单的obj.say()即可。

Javascript是一种动态语言,这也是javascript最明显的地方之一了。当我们打开并运行上述代码至浏览器中,我们在控制台中输入,
这里写图片描述
说明运行成功,如果我们想继续添加性别sex属性,则直接输入即可,如图
这里写图片描述
这样属性就加在a这个对象中去了。
同样如果我们想删除其中的属性,
这里写图片描述


五、创建对象的其它方法

除了上述的字面量方法之外,还有以下两种方法。工厂模式和构造函数方法。
工厂模式:
字面量方法有它的缺点,当每次我们需要创建的时候都需要创建一个变量,比如我们需要创建一个b,则继续
如果再创建一个c对象,则

var b={
    name:"xxx",
    ....
 }
 var c={
    name:"xxx",
    ...
}

如果有相同的方法,则需要在对象b和c对象中重复写方法,这样会造成代码多余。所以,为了解决这个问题,出现了工厂模式,使用函数来封装其对象的生成。

<script type="text/javascript">
    function createPerson(name, age, job) {
        var o = new Object();
        o.name = name;
        o.age = age;
        o.job = job;
        o.sayName = function() {
            alert(this.name);
        };
        return o;
    }
    var person1 = createPerson("xiaoming", 9, "js开发者");
    var person2 = createPerson("xiaohua", 10, "java开发者");
</script>

这样就可以多次调用createPerson方法就可以了,而且只需要写一次就行了。无论你创建多少个对象都只需要调用createPerson(name,age,job)
但是工厂模式有一个缺点,就是无法识别对象类型。

构造函数创建对象:
为了解决对象类型的识别问题,产生了构造函数的创建对象方法。这个和Java很类似。

<script type="text/javascript">
    function Person (name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.eat = function () {
            alert(this.name + "在吃东西");
        }
    }
    var p1 = new Person("xiaoming", 20, "男");
    p1.eat();   //xiaoming在在吃东西
    var p1 = new Person("xiaohua", 30, "女");
    p1.eat();   //xiaohua在在吃东西
</script>

构造函数中,其实是使用了new构造函数()方式创建了对象,this代表的是这个新的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值