当前位置: 代码网 > it编程>编程语言>Javascript > ES6基础语法之class类介绍

ES6基础语法之class类介绍

2024年05月18日 Javascript 我要评论
一、class基本语法javascript 语言中,编写一个学生类,代码如下:(prototype可以个对象添加属性和方法)function student(stuno,stuname){this.s

一、class基本语法

javascript 语言中,编写一个学生类,代码如下:(prototype可以个对象添加属性和方法)

function student(stuno,stuname)
{
	this.stuno = stuno;
	this.stuname = stuname;
}
student.prototype.stusex = "";
student.prototype.sayhi = function()
{
	console.log("大家好,我是"+this.stuname+",我的学号是"+this.stuno+",性别:"+this.stusex);
}
var stu = new student("001","孙悟空");
stu.stusex = "男";
//或
// var stu = new student();
// stu.stuno = "001";
// stu.stuname = "孙悟空";
// stu.stusex = "男";
stu.sayhi(); //大家好,我是孙悟空,我的学号是001,性别:男

es6提供了更接近传统语言的写法,引入了class这个概念:

constructor为构造函数,当创建对象的时候自动调用:

class student
{
	constructor(stuno,stuname) {
		this.stuno = stuno;
		this.stuname = stuname;
	}
	sayhi()
	{
		console.log("大家好,我是"+this.stuname+",我的学号是"+this.stuno);
	}
}
var stu = new student("001","孙悟空");
//或
// var stu = new student();
// stu.stuno = "001";
// stu.stuname = "孙悟空";
stu.sayhi();	//大家好,我是孙悟空,我的学号是001

注意:类的声明第一行除了class student外,还可以如下写法:

let student = class
let student = class student

二、类的属性和方法

实例属性和实例方法:

class student
{
	stuno = "";
	stuname = "";
	sayhi()  //此处方法有的地方称为原型方法
	{
		console.log("大家好,我是"+this.stuname+",我的学号是"+this.stuno);
	}
}
var stu = new student();
stu.stuno = "001";
stu.stuname = "孙悟空";
stu.sayhi();

静态属性和静态方法:

class student
{
	stuno = "";
	stuname = "";
	static proname = "";  //专业名称
	static prointroduce()
	{
		console.log("专业名称:"+student.proname);
	}
	sayhi()
	{
		console.log("大家好,我是"+this.stuname+",我的学号是"+this.stuno);
	}
}
student.proname = "计算机";
student.prointroduce();

三、实例方法的两种写法

方案一:(又称原型方法)

class student
{
	sayhi()
	{
		console.log("hi!");
	}
}
let stu = new student();
stu.sayhi();

等同于es5中:

function student(){			}
student.prototype.sayhi=function()
{
	console.log("hi!");
}
var stu = new student();
stu.sayhi();

方案二:

class student
{
	constructor()
	{
		this.sayhi = function()
		{
			console.log("hi");
		}
	}
}
let stu = new student();
stu.sayhi();

等同于es5中:

function student()
{
	this.sayhi = function()
	{
		console.log("hi");
	}
}
var stu = new student();
stu.sayhi();

当两个方案冲突的时候,constructor里面的函数会覆盖外面的函数:

class student
{
	sayhi()  //等同student.prototype.sayhi=function(){...}
	{
		console.log("hi!");
	}
	constructor()
	{
		this.sayhi = function() //等同在function内部定义
		{
			console.log("hello!");
		}
	}
}
let stu = new student();
stu.sayhi(); //hello!

等同于es5中:

function student()
{
	this.sayhi = function()
	{
		console.log("hello!");
	}
}
student.prototype.sayhi=function()
{
	console.log("hi!");
}
var stu = new student();
stu.sayhi(); //hello!

四、class属性封装

在类的内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。

class student
{
	get stuage(){
		return this._stuage;
	}
	set stuage(age)
	{
		if(age >= 18 && age <= 120)
			this._stuage = age;
		else
		{
			this._stuage = 18;
			console.log("年龄有错误,设置默认值18!");
		}
	}
}
let stu = new student();
stu.stuage = 17;   //年龄有错误,设置默认值18!
console.log(stu.stuage); //18
//------------------------------------------------------------------------------
//注意:
//(1)在get和set后的属性名不能和函数里的取值和设置值的变量名相同(stuage和_stuage)
//(2)getter不可单独出现
//(3)getter与setter必须同级出现(不能一个在父类,一个在子类)

五、继承

通过 extends 实现类的继承。

//通过 extends 实现类的继承。
class people //父类
{
	name = "";
	sex = "";
	age = 0;
	sayhi()
	{
		console.log(`姓名:${this.name},性别:${this.sex},年龄:${this.age}`);
	}
}
class student extends people  //子类继承父类,拥有父类的属性和方法
{
	
}
class teacher extends people //子类继承父类,拥有父类的属性和方法
{
	salary = 0; //子类在父类基础上扩展一个属性
	sayhi() //子类在父类基础上重写父类方法
	{
		console.log(`姓名:${this.name},性别:${this.sex},年龄:${this.age},月薪:${this.salary}`);
	}
}
let stu = new student();
stu.name = "孙悟空";
stu.sex = "男";
stu.age = 500;
stu.sayhi(); //姓名:孙悟空,性别:男,年龄:500

let tc = new teacher();
tc.name = "唐僧";
tc.sex = "男";
tc.age = 100;
tc.salary = 6000;
tc.sayhi(); //姓名:唐僧,性别:男,年龄:100,月薪:6000

六、继承和构造方法

子类通过super()调用父类构造方法:

class people
{
	constructor(name,sex,age)
	{
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	sayhi()
	{
		console.log(`姓名:${this.name},性别:${this.sex},年龄:${this.age}`);
	}
}
class student extends people
{
	constructor(name,sex,age)
	{
		super(name,sex,age);
	}
}
class teacher extends people
{
	constructor(name,sex,age,salary)
	{
		super(name,sex,age);
		this.salary = salary;
	}
	sayhi()
	{
		console.log(`姓名:${this.name},性别:${this.sex},年龄:${this.age},月薪:${this.salary}`);
	}
}
let stu = new student("孙悟空","男",500);
stu.sayhi(); //姓名:孙悟空,性别:男,年龄:500

let tc = new teacher("唐僧","男",100,6000);
tc.sayhi();	//姓名:唐僧,性别:男,年龄:100,月薪:6000
//------------------------------------------------
//注意:
//(1)子类 constructor 方法中必须有 super ,且必须出现在 this 之前。
//(2)调用父类构造函数,只能出现在子类的构造函数。
//	例如在sayhi()中调用super就会报错;

到此这篇关于es6基础语法之class类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com