JavaScript中的class

这里是学习class时的一些笔记

class 是一个关键字,可以用它来创造一个构造函数,有基于对象原型的继承,这种创建方式比传统方法更有效。我们可以瞧瞧他们之间的区别。

constructor:

MDN:constructor方法是一种特殊的方法,目的是为了在class内部创造和初始化一个对象。

从文档里理解起来有一点点难度,它是一个方法,目的就是为了实例化对象。所谓实例化就是这个用构造函数创造一个具体对象的过程。我们通常把一些设计好的初始化数据放在里面。其实这里的constructor 和 原型里面的constructor 不是同一个,因为它们指向的对象不同。构造函数原型里面的constructor指向的是构造函数本身,而class里面的constructor 就是指向它后面跟的那个函数

//第一、我们来研究class是创造构造函数的关键字。它是一个关键字,目的是为了创造构造函数。
	// 1.我们先用传统的方法来写一个构造函数
	function Person(name, age){
		this.name = name;
		this.age = age;
		this.say = function () {
			console.log("Hello, my name is " + this.name + " and I am " + this.age);
		}
	}

	let xiaoWan = new Person("xiaoWan", 23);
	xiaoWan.say();

	// 2.接下来我们用class来创建一个构造函数

	class Human{
		constructor (name, age) {
			this.name = name;
			this.age = age;
		}
		say() { //这里是用的ES6 的函数写法,和上面那个say是一样的
			console.log("Hello, my name is " + this.name + " and I am " + this.age)
		}
	}

	let laoLi = new Human("laoLi", 32);
	laoLi.say();
	//	所以我们可以看到,其实他们的效果是一样的。但是既然有了class,那么就应该有它的新特性才对,不然我们干嘛要弄一个class出来。那我们接下来就研究一下他们之间的区别吧。

	//第二、 基于原型的继承,这就是它们的区别所在,也是class比较强大的地方。我们用class来做继承是非常方便的。
	//1. 我们先用传统方法来做继承: 让Student继承自Person
	function Student (name, age, grade, major){
		Person.call(this, name, age);// 继承Person的属性和值
		this.grade = grade;
		this.major = major;
		this.study = function () {
			console.log(`I am ${this.name} studying ${this.major}`);// ES6新语法,在字符串中用$符来添加变量字符串
		}
	}

	let student1 = new Student("xiaoMin", 19, "freshman", "computer science" );
	student1.study();
	student1.say();
	// 从结果中我们可以看到,student1.say()是可以执行,即使我们在它的构造函数里并没有写这个方法。当执行这个语句的时候,系统发现Student里面并没有这个方法,然后就去它的爹那里找,也就是Person里找,然后果然找到了。
	// 2. 我们再用class方法来做继承

	class Scholar extends Person{
		constructor (name, age, grade, major){
			super(name, age);
			this.grade = grade;
			this.major = major;
		}
		study() {
			console.log(`I am ${this.grade} studying ${this.major}`);
		}
	}

	let student2 = new Scholar("xiaoHong", 20, "sophomore", "financial management");
	student2.study();
	student2.say();

	// 首先,用class来做继承便于阅读,第一句就是Scholar 继承 Person。其实extend的原意是“扩展,延伸”的意思,也就是Scholar 扩展至 Person。能理解的就理解,不能的就把它当做“继承” 的意思。然后 class 里面一般把方法放在外面,然后把其他的属性放到constructor里面,这样结构很有层次感,便于阅读和理解。其实class里面还有两个关键字get 和 set。这两个关键字也很强大, 可以用来处理输入和输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值