一、面向对象和面向过程
- 面向过程
着重于解决问题的步骤,明确其解决的步骤,一步步去实现。着眼于局部和具体。 - 面向对象
着重于一种解决的思维,建立对象是为了更好的解决问题的行为。更注重于整体。
面向对象是一种思维方法,编程方法,而且也不针对于某种编程语言。一种编程的思想
二、面向对象的基本特性
继承:某一个类继承另一个类,则具备另一个类的属性和方法
多态:不同的相同方法中有不同的表现形式
封装:将客观事物封装成抽象或具体的对象,一个类中可以封装其内部的属性和方法,选择性的公开对应的属性和方法
三、对象
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代表的是这个新的对象。