从零开始程序之路---JS(4)面向对象

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值