部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ES6——Class基础语法

ES6——Class基础语法

作者头像
流眸
发布于 2019-08-09 08:00:43
发布于 2019-08-09 08:00:43
42100
代码可运行
举报
运行总次数:0
代码可运行

一、 简介

  JavaScript语言传统方法是通过构造函数定义并生成新对象。例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    function Add (a, b) {

        this.a = a;

        this.b = b;

    }


    Add.prototype.toString = function () {

        return this.a + this.b;

    }


    var add = new Add(5, 8)

  而在ES6中,引入了Class这个概念来作为对象的模板。而class只是一个语法糖写法,还是基于ES5封装而来的。上面的例子用class来改写如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 定义类

    class Add {

        constructor (a, b) {

            this.a = a;

            this.b = b;

        }


        toString () {

            return this.a + this.b;

        }

    }

注:方法之间不需要加逗号,否则会报错。

  从中可见一个constructor方法,这便是构造方法。另外,关键字this则代表实例对象


二、基本准则

  • ES6的类完全可以看作是构造函数的另一种写法
  • 类的数据类型就是函数,类本身就只想构造函数
  • 构造函数的prototype属性在ES6的类上继续存在
  • 类的所有方法都定义在类的prototype上
  • 在类的实例上调用方法,其实就是调用原型上的方法
  • Object.assign可以一次向类添加多个方法
  • 类的内部定义的所有方法都是不可枚举的
  • 类的属性名可以采用表达式
1. 一次向类添加多个方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // Object.assign(类原型,{方法列表})

    Object.assign(Add.prototype, {

        toString () {},

        toValue () {}

    })
2. 不可枚举
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class Add {

        constructor (a, b) {

            // ...

        }


        toString () {

            // ...

        }

    }


    Object.keys(Add.prototype); // []

    Object.getOwnPropertyNames(Add.prototype);  // ["constructor", "toString"]
3. 属性名表达式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    const methodName = 'getValue';


    class Add {

        constructor (a, b) {

            // ...

        }


        [methodName] () {

            // ...

        }

    }

三、 拓展

1. 严格模式

  类和模版的内部默认使用严格模式,所以无需使用use strict指定运行模式。只要将代码卸载类或者模块之中,就只有严格模式可用。ES6已经把整个语言都升级到了严格模式下。

2. constructor方法

  constructor方法是类的默认方法,通过new命令生成对象实例时自动调用该方法。如果类中没有显式定义,则会默认添加一个空的constructor方法。例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class Add {


    }


    // 等同于

    class Add {

        constructor () {}

    }

  上面代码中定义了一个空的类Add,JavaScript引擎会自动给它添加一个空的constructor方法。除此之外,还需注意的是:

  • constructor方法默认返回this,不过也可以指定返回另一个对象
  • 类必须使用new来调用,否则会报错
3. 类的实例对象

  实例的属性除非是显式定义在this对象上,否则都是定义在了Class上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class Add {

        constructor (a, b) {

            this.a = a;

            this.b = b;

        }


        toString () {

            return this.a + this.b;

        }

    }


    var add = new Add(5, 8);

    add.toString(); // 13


    add.hasOwnProperty('a');    // true

    add.hasOwnProperty('b');    // true

    add.hasOwnProperty('toString');     // false

    add.__proto__.hasOwnProperty('toString');   // true

  从上面代码中,a和b都是实例对象Add自身的属性,因为定义在this变量上,所以执行hasOwnProperty方法返回true;而toString是原型对象的属性,因为定义在Add上,所以hasOwnProperty方法返回的事false。另外,类的所有实例共享一个原型对象;可以通过实例的proto属性为类来添加方法。

4. 其他

  除上述所说之外,类同样有很多有意思的属性或者方法,此处放上一些,以供参考。

  • Class表达式
  • 不存在变量提升
  • 私有方法
  • 私有属性
  • this的指向
  • name属性
  • Class的存取值函数(setter/getter)
  • Class的Generator方法
  • Class的静态方法
  • 静态属性和实例属性
  • new.target属性

参考:ECMAScript 6 入门 - 阮一峰

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 流眸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6——类(Class)
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。 ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用 ES6 的class改写,就是下面这样。
羊羽shine
2019/07/31
1.1K0
一万字ES6的class类,再学不懂,请来找我(语法篇)
上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。
coder_koala
2021/11/12
3430
JS es6的Class类详解
JavaScript 语言中,生成实例对象的传统方法是通过构造函数和原型的组合模式.ES6 提供了更接近传统语言(java)的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。
全栈程序员站长
2022/06/28
4.7K0
JS es6的Class类详解
ES6的class详解
声明创建一个基于原型继承的具有给定名称的新类。 和类表达式一样,类声明体在严格模式下运行。构造函数是可选的。类声明不可以提升(这与函数声明不同)
用户10106350
2022/10/28
3760
ES6-标准入门·Class 类
直至 ES6,JavaScript 终于有了“类”的概念,它简化了之前直接操作原型的语法,也是我最喜欢的新特性之一,但此类非彼类,它不同于熟知的如 Java 中的类,它本质上只是一颗语法糖。
数媒派
2022/12/01
2900
es6中class类的全方面理解(一)
传统的javascript中只有对象,没有类的概念。它是基于原型的面向对象语言。原型对象特点就是将自身的属性共享给新对象。这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人困惑! 如果要生成一个对象实例,需要先定义一个构造函数,然后通过new操作符来完成。构造函数示例:
用户1272076
2019/03/26
4750
ES6之class的继承
class语法为我们提供了构造函数的语法糖,响应的,也给我们提供了ES5通过原型链实现继承提供了extends关键字实现继承。继承这个概念对面后台应该也是非常常见。
wade
2020/04/23
5240
《你不知道的js(上卷)》笔记2(this和对象原型)
this关键字是javascript中最复杂的机制之一。它是一个很特别的关键字,被自动定义在 所有函数的作用域中。
陨石坠灭
2020/01/21
7230
JavaScript继承的实现方式:原型语言对象继承对象原理剖析
对象的继承:A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。这对于代码的复用是非常有用的。
周陆军
2021/08/14
8290
ES6中的Class回顾总结一
JS中的面向对象,在es6中有class类后,变得更容易理解了,虽然这个class只是JS原型思想构造函数的语法糖,但无疑让习惯了面向对象编程的开发者找到熟悉的套路。
前端_AWhile
2019/08/29
3320
万字长文深度剖析面向对象的javascript
本将会深入讲解面向对象在javascript中的应用,并详细介绍三种对象的生成方式:构造函数,原型链,类。
程序那些事
2020/12/14
3480
ES6之class基本语法
类这个概念对于做后台的应该是非常熟悉,JavaScript的类对于其他面向对象的语言差异很大,只能使用构造函数生成实例对象。为了接近传统语言,ES6引入了class类这个概念,通过class关键字定义类。
wade
2020/04/23
2840
详解js原型,构造函数以及class之间的原型关系
含义: 是一个函数的属性,这个属性是一个指针,指向一个对象 作用: 构造函数调用 访问该构造函数所关联的原型对象
念念不忘
2019/03/29
1.7K0
详解js原型,构造函数以及class之间的原型关系
《你不知道的JavaScript(上)之原型对象》读书笔记
4.如果构造函数中没有返回新对象,那么返回this,即创建新对象;否则,返回构造函数中返回的对象。
after the rain
2022/08/08
6700
JS面向对象编程
通过instanceof来判断当前的的对象是否是实例化出来的,如果是实例化出来的this指向实例化出来的对象,也就是这里的Person,否则作为普通函数来说当前的this指向window
小丞同学
2021/08/16
4.1K0
Object 中的几个很相似的方法
这里主要讨论这么几个方法,他们用法很相似,但又有所不同。在实际开发中就有可能陷入其中,搞不清到底用哪个方法比较好。下面就开始一一介绍。
多云转晴
2019/10/23
6140
Object 中的几个很相似的方法
JavaScript原型与继承
对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。
用户1428723
2020/08/06
5560
JavaScript 高级程序设计(第 4 版)- 对象、类与面向对象编程
通过字面量来重写原型时,Person.prototype被设置为等于一个通过对象字面量创建的新对象,此时Person.prototype的constructor属性就不指向Person了
Cellinlab
2023/05/17
6560
JavaScript 高级程序设计(第 4 版)- 对象、类与面向对象编程
ES5和ES6函数你不知道的区别【面试篇】 前言1. PolyFill2.性能上3 hooks和 class 的性能4.用法上5.总结
1.利用原生 js 撸一个简单的 class; 2.根据上面的用法知道 class 必须通过 new 调用,不能直接调用;
火狼1
2020/05/09
2K0
es6 的 class 与 es5 的语法对比
但是 javascript 中还是可以使用面向对象的方式去编写代码的,因为面向对象是一种思想。ECMAScript 5 中使用原型对象来实现类似 class 的作用
用户9914333
2022/07/21
4790
es6 的 class 与 es5 的语法对比
相关推荐
ES6——类(Class)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验