js是一个比较庞杂的体系结构,但是我们要相信实践的力量,在前面的分享中,我们一直没有分享程序的基本结构,因为你如果坚持把前面每个连续博文的小案例走一下的话,你可能在无形之间就已经掌握了这些基本程序结构。当然这些结构在后面的分享中会持续用到,今天开始我们将开始一个新的阶段,面向对象编写,在此,提醒大家一个新的阶段也应该有一个新的状态。好好把这段路走好,会给以后很多地方打好基础。
1 为什么要有面向对象?
这是一个好问题,即使它是我提出的,前面我们可以定义变量如var number1=12; var str="hello world";等。但请思考一个问题 ,如果我想保存一个人的年龄和姓名,你可用以前的知识可能就是定义两个变量,var age=1保存年龄,var name="XX"保存姓名。但是在逻辑上这两个变量是分离的内存中的两个空间,如何才能体现其两者归属于同一主体?看一段代码:
<script lang="javascript">
// 定义一个构造函数
function Person(name, age) {
this.name= name;
this.age= age;
this.sayHello = function() {
alert("Hello, my name is " + this.name);
};
}
// 使用构造函数创建对象
var person1 = new Person("Alice", 30);
var person2 = new Person("Bob", 25);
// 调用对象的方法
person1.sayHello(); // 输出: Hello, my name is Alice
person2.sayHello(); // 输出: Hello, my name is Bob
</script>
这段代码运行没有任何问题,但这个在此也是给大家简单介绍一下,它是在ES6之前,JavaScript没有类的概念,但可以通过构造函数来模拟类的行为。构造函数是一种特殊的函数,用于创建和初始化对象。构造函数名通常以大写字母开头,以便与普通函数区分。还接的我们创建一个数组new Array()吗,就是因为这个。这个算是其过去式,简单了解即可,请对比下面是ES6引入其他真正面向对象语言思想和结构后的格式,务必请大家需要掌握的,请看对照代码:
<script lang="javascript">
class Person{
constructor(name,age)
{
this.name=name;
this.age=age;
}
sayHello()
{
alert("Hello, my name is " + this.name);
}
}
person1 = new Person("zhangwei", 42);
person2 = new Person("magic", 25);
// 调用对象的方法
person1.sayHello(); // 输出: Hello, my name is Alice
person2.sayHello(); // 输出: Hello, my name is Bob
</script>
javascript中类的定义与传统的面向对象语言中的定义又略有不同。传统的方法如java中定义person的格式为:
class Person{
String name;
int age;
public Person()
{
}
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void sayHello()
{
方法体
}
}
以java为例分析其中的不同,注意对照不同,在java中类属性name和age必须要明确写出,而js中不需要,只需要在constructor中提及 this.age,this.name即说明类中有此属性。有返回值也无需说明返回值类型,直接return,直接调用即可,如下代码 getAge
class Person{
constructor(name,age)
{
this.name=name;
this.age=age;
}
sayHello()
{
alert("Hello, my name is " + this.name);
}
getAge()
{
return this.age;
}
}
person1 = new Person("zhangwei", 42);
person2 = new Person("magic", 25);
// 调用对象的方法
person1.sayHello(); // 输出: Hello, my name is Alice
person2.sayHello(); // 输出: Hello, my name is Bob
var age=person1.getAge();
alert(age);