ES6通过什么定义类

ES6中,class)作为对象的模板被引入,可以通过“class”关键字来定义类。class的本质是function,它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。

ES6通过什么定义类

本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

ES6 Class

在ES6中,class(类)作为对象的模板被引入,可以通过“class”关键字来定义类。

class 的本质是 function。

基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

基础用法

类定义

类表达式可以为匿名或命名。

// 匿名类let Example = class {    constructor(a) {        this.a = a;    }}// 命名类let Example = class Example {    constructor(a) {        this.a = a;    }}

登录后复制

类声明

class Example {    constructor(a) {        this.a = a;    }}

登录后复制

注意要点:不可重复声明。

class Example{}class Example{}// Uncaught SyntaxError: Identifier 'Example' has already been // declared let Example1 = class{}class Example{}// Uncaught SyntaxError: Identifier 'Example' has already been // declared

登录后复制

注意要点:

类定义不会被提升,这意味着,必须在访问前对类进行定义,否则就会报错。

类中方法不需要 function 关键字。

方法间不能加分号。

new Example(); class Example {}

登录后复制

类的主体

属性

prototype

ES6 中,prototype 仍旧存在,虽然可以直接自类中定义方法,但是其实方法还是定义在 prototype 上的。 覆盖方法 / 初始化时添加方法

Example.prototype={    //methods}

登录后复制

添加方法

Object.assign(Example.prototype,{    //methods})

登录后复制

静态属性

静态属性:class 本身的属性,即直接定义在类内部的属性( Class.propname ),不需要实例化。 ES6 中规定,Class 内部只有静态方法,没有静态属性。

class Example {// 新提案    static a = 2;}// 目前可行写法Example.b = 2;

登录后复制

公共属性

class Example{}Example.prototype.a = 2;

登录后复制

实例属性

实例属性:定义在实例对象( this )上的属性。

class Example {    a = 2;    constructor () {        console.log(this.a);    }}

登录后复制

name 属性

返回跟在 class 后的类名(存在时)。

let Example=class Exam {    constructor(a) {        this.a = a;    }}console.log(Example.name); // Exam let Example=class {    constructor(a) {        this.a = a;    }}console.log(Example.name); // Example

登录后复制

方法

constructor 方法

constructor 方法是类的默认方法,创建类的实例化对象时被调用。

class Example{    constructor(){      console.log('我是constructor');    }}new Example(); // 我是constructor

登录后复制

返回对象

class Test {    constructor(){        // 默认返回实例对象 this    }}console.log(new Test() instanceof Test); // true class Example {    constructor(){        // 指定返回对象        return new Test();    }}console.log(new Example() instanceof Example); // false

登录后复制

静态方法

class Example{    static sum(a, b) {        console.log(a+b);    }}Example.sum(1, 2); // 3

登录后复制

原型方法

class Example {    sum(a, b) {        console.log(a + b);    }}let exam = new Example();exam.sum(1, 2); // 3

登录后复制

实例方法

class Example {    constructor() {        this.sum = (a, b) => {            console.log(a + b);        }    }}

登录后复制

类的实例化

new

class 的实例化必须通过 new 关键字。

class Example {} let exam1 = Example(); // Class constructor Example cannot be invoked without 'new'

登录后复制

实例化对象

共享原型对象

class Example {    constructor(a, b) {        this.a = a;        this.b = b;        console.log('Example');    }    sum() {        return this.a + this.b;    }}let exam1 = new Example(2, 1);let exam2 = new Example(3, 1); // __proto__ 已废弃,不建议使用// console.log(exam1.__proto__ == exam2.__proto__);  console.log(Object.getPrototypeOf(exam1) === Object.getPrototypeOf(exam2));// true Object.getPrototypeOf(exam1).sub = function() {    return this.a - this.b;}console.log(exam1.sub()); // 1console.log(exam2.sub()); // 2

登录后复制

【相关推荐:javascript视频教程、web前端】

以上就是ES6通过什么定义类的详细内容,更多请关注【创想鸟】其它相关文章!

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2936608.html

(0)
上一篇 2025年3月11日 21:03:16
下一篇 2025年2月25日 01:38:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • es6中map和foreach有什么区别

    区别:1、forEach()方法不会返回执行结果,返回值为“undefined”,而map()方法会返回运算结果,会返回一个数组;2、forEach()方法会修改原来的数组,而map()方法不会修改原来的数组。 本教程操作环境:window…

    2025年3月11日 编程技术
    200
  • es6怎么比较2个数组的值是否相等

    es6中可用every()和some()来进行比较,语法“s1.length===s2.length&&s1.every(a=>s2.some(b=>a===b))&&s2.every(_b=&g…

    2025年3月11日
    200
  • es6怎么判断数组是否为空

    es6判断数组是否为空的方法:1、使用“arr.length == 0”语句,判断数组的长度是否为0,如果为0则为空;2、使用“JSON.stringify(arr) === ‘[]’”语句,如果返回值为false则…

    2025年3月11日
    200
  • es6中三个点是什么意思

    在es6中,三个点“…”指的是“扩展运算符”,可以在函数调用或数组构造时,将数组表达式或者string在语法层面展开;也可以在构造字面量对象时将对象表达式按照“key-value”的方式展开。 本教程操作环境:windows7系…

    2025年3月11日
    200
  • jquery怎么改变div的class属性

    改变方法:1、使用“$(“div”).addClass(“class属性值”)”语句;2、使用“$(“div”).attr(“class”,&#…

    2025年3月11日 编程技术
    200
  • es6深度拷贝的几种实现方法是什么

    深度拷贝的实现方法:1、使用“Object.assign({},obj)”语句来实现;2、使用“JSON.parse(JSON.stringify(obj))”语句来实现;3、使用“$.extend(true,[],arr)”语句来实现。 …

    2025年3月11日
    200
  • es2017是es6吗

    es2017不是es6;es2017又称es8,和es6是两个版本。es2017是2017年发布的ECMAScript的第8个版本,因此也可简称为es8;而es6是2015年发布的ECMAScript的第6个版本,也可称为es2015。 本…

    2025年3月11日
    200
  • es6箭头函数要注意什么

    注意事项:1、箭头函数会改变函数内this的指向与上级作用域中的this指向保持一致;2、不可以当作构造函数,即不可以使用new命令;3、不可以使用arguments对象;4、不可以使用yield命令,不能用作Generator函数。 本教…

    2025年3月11日
    200
  • es6中什么是装饰器

    在es6中,装饰器(Decorator)是一种与类(class)相关的语法,用来注释或修改类和类方法;装饰器其实就是一个编译时执行的函数,语法“@函数名”,通常放在类和类方法的定义前面。装饰器有两种:类装饰器和类方法装饰器。 本教程操作环境…

    2025年3月11日
    200
  • assign是es6方法吗

    assign是es6方法。assign()是es6 Object对象新增的一个方法,“Object.assign()”方法用于对象的合并,可以将源对象的所有可枚举属性,复制到目标对象上;该方法的第一个参数是目标对象,后面的参数都是源对象。 …

    2025年3月11日
    200

发表回复

登录后才能评论