这篇文章主要介绍了ES6基础语法之class类怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6基础语法之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!
在类的内部可以使用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类怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“ES6基础语法之class类怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。