【ES6】中构造函数的语法糖 —— Class(类)

这篇具有很好参考价值的文章主要介绍了【ES6】中构造函数的语法糖 —— Class(类)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在现代前端开发中,JavaScript的面向对象编程成为了主流。ES6引入了class关键字,使得开发者可以更方便地使用面向对象的方式编写代码,更接近传统语言的写法。ES6的class可以看作是一个语法糖,它的绝大部分功能ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法。

一、定义和使用class

在JavaScript中,class是创建对象的一种方式,它定义了一个类的模板,包含了属性和方法的声明,在底层中仍然是使用原型和基于原型的继承。

// ES5写法
function ShuiGuo(name, price){
  this.name = name;
  this.price = price;
}
// 添加方法
ShuiGuo.prototype.eat = function(){
  console.log("吃水果啦!");
}
// 实例化对象
let shuiguo = new ShuiGuo("杨梅", 50);
console.log(shuiguo);
shuiguo.eat();
// ES6写法
class Fruit{
  // 构造方法
  constructor(name, price){
    this.name = name;
    this.price = price;
  }
  eat(){
    console.log("吃水果啦!");
  }
}
let fruit = new Fruit("西瓜", 50);
console.log(fruit);
fruit.eat();

 【ES6】中构造函数的语法糖 —— Class(类),es6,前端,javascript

 

在上面的代码示例中,我们定义了一个Fruit类,它有一个constructor构造函数和一个eat方法。构造函数用于初始化对象的属性,而方法用于定义对象的行为。通过new关键字我们可以创建Fruit类的实例,并调用其方法。

  1. class 类名{},不要写成class 类名(){},不用加小括号。
  2. constructor构造函数与eat方法之间不用写逗号。
  3. 定义方法时直接写eat(){},不要写成eat:function(){},不用冒号也不用写function。

 二 、constructor构造函数

        在类(class)中,constructor是一个特殊的方法,用于在创建对象时初始化实例属性和方法。它接受传递给类的参数,并使用它们来创建和初始化类的对象。constructor方法是类中默认的构造函数,constructor这个关键字是固定的,不能随意修改。

        当一个实例化对象被创建时,它会自动调用constructor方法以初始化自己,用于实例化对象时初始化属性和方法。当使用new关键字创建类的实例时,构造函数会被自动调用。它是一个默认的方法,如果没有手动定义,则会自动在类中创建。

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }
  getArea() {
    return this.width * this.height;
  }
}
const rect = new Rectangle(5, 10);
console.log(rect.getArea()); // 输出: 50

在上述的代码示例中,Rectangle类有一个构造函数,它接受width和height参数,并将它们分别赋值给对象的width和height属性。

三、super关键字和extends关键字

function Food(type, price){
  this.type = type;
  this.price = price;
}
Food.prototype.eat = function(){
  console.log("食物挺好吃!");
}
function Fruit(type, price, color){
  Food.call(this, type, price);
  this.color = color;
}
// 设置自己构造函数的原型
Fruit.prototype = new Food;
Fruit.prototype.constructor = Fruit;
Fruit.prototype.zhazhi = function(){
  console.log("将水果榨汁喝!");
}
let fruit = new Fruit("西瓜", 50, "绿色");
console.log(fruit); //Fruit {type: '西瓜', price: 50, color: '绿色'}
fruit.eat();    //食物挺好吃!
fruit.zhazhi(); //将水果榨汁喝!

        在类继承中,当子类需要在自己的构造函数中进行一些初始化操作时,可以使用super关键字来调用父类的构造函数。确保子类实例继承了父类的属性,并且可以在子类中进行进一步的初始化操作。

【ES6】中构造函数的语法糖 —— Class(类),es6,前端,javascript

 

  extends关键字实现了JavaScript中的类继承,让子类能够继承父类中的所有属性和方法,并且能够添加自己的属性和方法进行扩展。

class Food{
  constructor(type, price){
    this.type = type;
    this.price = price;
  }
  // 父类的成员方法
  eat(){
    console.log("食物挺好吃!");
  }
  youzha(){
    console.log("油炸食物挺好吃!");
  }
}
class Fruit extends Food{
  constructor(type, price, color){
    super(type, price);
    this.color = color;
  }
  eat(){
    console.log("水果真好吃!"); //可以重写父类方法
    super.eat(); //调用父类方法
  }
  zhazhi(){
    console.log("将水果榨汁!");
    super.eat(); //调用父类方法
  }
}
let fruit = new Fruit("西瓜",50,"绿色");
console.log(fruit);
fruit.eat(); //水果真好吃! 食物挺好吃!
fruit.zhazhi(); //将水果榨汁! 食物挺好吃!
fruit.youzha(); //油炸食物挺好吃!

        如上述代码所示,使用super(type, price)调用父类的构造函数来初始化父类的属性,子类还有一个额外的属性color。子类Fruit使用extends关键字继承了父类Food。fruit对象可以调用父类Food的youzha方法,并且改写eat方法。

四、Static静态方法和属性

function Fruit(){

}
Fruit.NAME = "水果";
Fruit.eat = function(){
  console.log("水果真好吃!");
}
Fruit.prototype.type = "西瓜";
let fruit = new Fruit();
console.log(Fruit.NAME);  //水果
console.log(Fruit.type);    //undefined
Fruit.eat(); //水果真好吃!
console.log(fruit.type);    //西瓜
console.log(fruit.NAME);  //undefined
fruit.eat(); //Uncaught TypeError: fruit.eat is not a function

        如上述代码所示,在函数中,NAME属性和eat方法是构造函数Fruit上的属性和方法,实例对象访问不到,实例对象只能访问定义在函数原型上的type。只有构造函数自己才能访问到NAME属性和eat方法,但是访问不了定义在函数原型上的type。

class ShuiGuo{
  static type = "西瓜";
  static eat = function(){
    console.log("水果真好吃!");
  }
}
let shuiguo = new ShuiGuo();
console.log(ShuiGuo.type); //西瓜
ShuiGuo.eat(); //水果真好吃!
console.log(shuiguo.type); //undefined
shuiguo.eat();  //Uncaught TypeError: shuiguo.eat is not a function

        在class中,可以使用static关键字定义静态方法。静态方法不需要实例化类就可以被调用,它们属于类本身而不是实例。可以通过类名去访问属性和方法,而实例对象访问不了。

五、getter和setter

在 JavaScript 的类中,我们可以使用 getter 和 setter 方法来定义属性的访问器。这允许我们在获取和设置属性值时执行自定义的逻辑。

Getter 方法用于获取属性的值,它被定义为一个没有参数的函数,并使用 get 关键字来声明。Getter 方法的命名通常与要获取的属性的名称相同。

Setter 方法用于设置属性的值,它被定义为一个带有一个参数的函数,并使用 set 关键字来声明。Setter 方法的命名通常与要设置的属性的名称相同。

class Fruit{
  get type(){
    console.log("type属性被读取了!");
    return "西瓜";
  }
  set type(newVal){
    console.log("type属性被修改了!");
  }
}
let fruit = new Fruit();
console.log(fruit.type); //type属性被读取了! 西瓜
fruit.type = "杨梅";       //type属性被修改了!

如上述代码所示,getter里的返回值就是读取fruit.type时的输出值。文章来源地址https://www.toymoban.com/news/detail-561047.html

到了这里,关于【ES6】中构造函数的语法糖 —— Class(类)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】上篇

    ⌚️⌚️⌚️个人格言:时间是亳不留情的,它真使人在自己制造的镜子里照见自己的真相! 📖Git专栏:📑Git篇🔥🔥🔥 📖JavaScript专栏:📑js实用技巧篇,该专栏持续更新中🔥🔥🔥,目的是给大家分享一些常用实用技巧,同时巩固自己的基础,共同进步,欢迎前来交流👀

    2023年04月16日
    浏览(38)
  • 【JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】下篇

    ⌚️⌚️⌚️个人格言:时间是亳不留情的,它真使人在自己制造的镜子里照见自己的真相! 📖Git专栏:📑Git篇🔥🔥🔥 📖JavaScript专栏:📑js实用技巧篇,该专栏持续更新中🔥🔥🔥,目的是给大家分享一些常用实用技巧,同时巩固自己的基础,共同进步,欢迎前来交流👀

    2024年02月01日
    浏览(76)
  • JavaScript学习笔记01(包含ES6语法)

    Js 最初被创建的目的是“使网页更生动”。 Js 写出来的程序被称为 脚本 ,Js 是一门脚本语言。 被直接写在网页的 HTML 中,在页面加载的时候自动执行 脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JIN compiler) Js 不仅可以在浏览器中执行,也可以在

    2024年02月16日
    浏览(53)
  • 构造函数及es6类写单例模式

            前言,什么叫做单例模式?简单点说, 单例模式就是只能创建一个由构造函数及类的实体,多次调用得到的都是第一次new出来的对象 。用处有,例如在需要全局管理的资源、频繁访问的配置信息、日志记录器、 数据库连接池 等情况下都可以使用单例模式来优化资

    2024年04月23日
    浏览(32)
  • ES5 的构造函数和 ES6 的类有什么区别

    在JavaScript中,类和构造函数都被用来创建对象,接下来会从以下几点说说两者的区别: 构造函数使用函数来定义 类使用class来定义 ES6 的 class 可以看作是一个语法糖,这种写法只是让对象原型的写法更加清晰、更像面向对象编程的语法。 比如这是一个构造函数生成实

    2024年02月11日
    浏览(42)
  • 15 JavaScript ES6中的箭头函数

    15 JavaScript ES6中的箭头函数 什么是箭头函数 ES6中允许使用=来定义函数。箭头函数相当于匿名函数,并简化了函数定义。 基本语法 箭头函数在语法上比普通函数简洁多。箭头函数就是采用箭头=来定义函数,省去function。 函数的参数放在=前面的括号中,函数体跟在=后的

    2024年02月12日
    浏览(49)
  • 【JavaScript解析】ES6定义变量与箭头函数详解

    箭头函数可以说是ES6的一大亮点,使用箭头函数,可以简化编码过程,使代码更加的简洁 本文由千锋前端老师独家创作,主要给大家介绍了关于ES6中箭头函数的相关资料,文中通过实例代码介绍的非常详细,觉得有帮助的话可以【关注】持续追更~ 我们现在知道定义(声明)一个变

    2024年02月05日
    浏览(48)
  • 后端程序员的前端必备【Vue】 - 07 ES6新语法

    使用let定义变量能更加精准的确定变量的作用域 使用const定义常量,常量一旦定义不可以改变 使用模板字符串可以避免大量的字符串拼接 类似于springmvc中接受参数拥有默认值 使用箭头函数可以简化复杂的代码结构(类似于java中lambda表达式) 箭头函数应用 定义:从一个大的数

    2024年02月04日
    浏览(48)
  • JavaScript全解析——ES6函数中参数的默认值和解构赋值

    本文为千锋资深前端教学老师带来的【JavaScript全解析】系列,文章内含丰富的代码案例及配图,从0到1讲解JavaScript相关知识点,致力于教会每一个人学会JS! 文末有本文重点总结,可以收藏慢慢看~ 更多技术类内容,主页关注一波! 给函数的形参设置一个默认值, 当你没有传

    2024年02月05日
    浏览(43)
  • ES6的class

    ES6 的类,可以看作构造函数的另一种写法。 类的数据类型就是函数,类本身就指向构造函数。 构造函数的prototype属性在ES6的类上面继续存在,定义在类内部的函数相当于定义在类的prototype属性上,prototype对象的constructor属性,直接指向“类”的本身, 但 类内部定义的方法不

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包