js中声明函数的三种方式,javascript声明变量的语句

2023-12-05

大家好,给大家分享一下javascript中函数如何声明及其作用,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

类的声明以及使用

声明

先声明,再访问 (函数声明会提升,类声明不会)

类关键字

class YourName {

// 类的主体

}

类表达式

var YourName = class {

/ /类的主体

}

类的实例化

var myUser = new YourName();

构造方法constructor()

constructor 是一种用于创建和初始化class创建的对象的特殊方法

在一个类中只能有一个名为 “constructor” 的特殊方法。 (否则报SyntaxError 错误)

如果没有显式指定构造方法,则会添加默认的 constructor 方法 Python中的所有运算符号

如果不指定一个构造函数(constructor)方法, 则使用一个默认的构造函数(constructor)。

class User {
    constructor(name) {
        		name; // => 'Fundebug'
        		this.name = name;
    		}
}

var user = new User("Fundebug");

类公有域(Public)

都可以访问该实例字段,实例方法

class ClassWithPrivateField {
  publicField
}

class ClassWithPrivateMethod {
  publicMethod() {
    return 'hello world'
 }
}

类私有域(Private)

只有定义该私有字段,方法的类能访问该字段,方法

class ClassWithPrivateField {
  #privateField
}

class ClassWithPrivateMethod {
  #privateMethod() {
    return 'hello world'
 }
}

静态(static)

类(class)通过 static 关键字定义静态方法。不能在类的实例上调用静态方法,而应该通过类本身调用。这些通常是实用程序方法,例如创建或克隆对象的功能。

        class ClassWithStaticMethod {

          static staticProperty = 'someValue';
          static staticMethod() {
            return 'static method has been called.';
          }

        }
        
        var StaticMethod = new ClassWithStaticMethod();

        console.log(ClassWithStaticMethod.staticProperty);
        // output: "someValue"
        console.log(ClassWithStaticMethod.staticMethod());
        // output: "static method has been called."

        console.log(StaticMethod.staticProperty);
        //underfind
        console.log(StaticMethod.staticMethod());
        //报错Uncaught TypeError: StaticMethod.staticMethod is not a function

静态私有字段

只有定义静态私有字段的类可以访问该字段

        class ClassWithStaticMethod {

            static #staticProperty = 'someValue';
            static staticMethod() {
                return ClassWithStaticMethod.#staticProperty;
            }

        }

        var StaticMethod = new ClassWithStaticMethod();

        console.log(ClassWithStaticMethod.staticProperty);
        // underfind
        console.log(ClassWithStaticMethod.staticMethod());
        // someValue

静态私有方法

静态私有方法也是在类里面而非实例中调用的。和静态私有字段一样,它们也只能在类的声明中访问。

        class ClassWithStaticMethod {

            static #staticProperty = 'someValue';
            static #staticMethod() {
                return ClassWithStaticMethod.#staticProperty;
            }

            static staticShow_staticMethod(){
                return ClassWithStaticMethod.#staticMethod()
            }
            Show_staticMethod(){
                return ClassWithStaticMethod.#staticMethod()
            }

        }

        var StaticMethod = new ClassWithStaticMethod();

        console.log(ClassWithStaticMethod.staticShow_staticMethod());
        // someValue
        console.log(StaticMethod.Show_staticMethod());
        // someValue

继承(extends)

extends关键字用于类声明或者类表达式中,以创建一个类,该类是另一个类的子类

子类可以继承父类中的公有成员

父类的私有成员不会被子类继承

//父类
class User {
    name;

    constructor(name) {
        this.name = name;
    }

    getName() {
        return this.name;
    }
}

//子类
class ContentWriter extends User {
    posts = [];
}

//子类实例
const writer = new ContentWriter("John Smith");

//子类可以访问父类中的公有字段和方法
writer.name; // => 'John Smith'
writer.getName(); // => 'John Smith'

//同时也有自己的字段
writer.posts; // => []

super

super 关键字用于访问和调用一个对象的父对象上的函数

在构造函数中使用时,super关键字将单独出现,并且必须在使用this关键字之前使用。super关键字也可以用来调用父对象上的函数

constructor()中的super()
//父类
class Polygon {
  constructor(height, width) {
    this.name = 'Rectangle';
    this.height = height;
    this.width = width;
  }
  sayName() {
    console.log('Hi, I am a ', this.name + '.');
  }
  get area() {
    return this.height * this.width;
  }
  set area(value) {
    this._area = value;
  }
}


//子类
class Square extends Polygon {
  constructor(length) {
    this.height; // ReferenceError,super 需要先被调用!

    // 这里,它调用父类的构造函数的,
    // 作为Polygon 的 height, width
    super(length, length);

    // 注意: 在派生的类中, 在你可以使用'this'之前, 必须先调用super()。
    // 忽略这, 这将导致引用错误。
    this.name = 'Square';
  }
}

\

调用父类上的静态方法

super相当于父类

class Rectangle {
  constructor() {}
  static logNbSides() {
    return 'I have 4 sides';
  }
}

class Square extends Rectangle {
  constructor() {}
  static logDeion() {
    
    //super相当于父类 Rectangle
    return super.logNbSides() + ' which are all equal';
  }
}
Square.logDeion(); // 'I have 4 sides which are all equal'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js中声明函数的三种方式,javascript声明变量的语句 的相关文章

随机推荐

  • 什么是Redo Log Buffer缓冲区?

    Redo Log 重做日志 会先存储在内存中 在MySQL中 Redo Log是一种事务日志 用于记录正在进行中的事务的修改操作 当事务执行更新操作 如插入 更新 删除 时 MySQL会先将对应的Redo Log记录写入到内存中的Redo
  • MySQL 刷脏页的速度很慢可能是什么原因?

    在 MySQL 中单独刷一个脏页的速度是很快的 如果发现刷脏页的速度很慢 说明触发了 MySQL 刷脏页的 连坐 机制 MySQL 的 连坐 机制是指当 MySQL 刷脏页的时候如果发现相邻的数据页也是脏页也会一起刷掉 而这个动作可以一直蔓
  • 使用idea如何快速的搭建ssm的开发环境

    文章目录 唠嗑部分 言归正传 1 打开idea 点击新建项目 2 填写信息 3 找到pom xml先添加springboot父依赖
  • netty源码:(3) ThreadPerTaskExecutor

    这个类封装了一个ThreadFactory 同时提供了一个execute方法 用来把Runnable提交给ThreadFactory来执行
  • Jmeter接口自动化测试 —— Jmeter变量的使用

    专注于分享软件测试干货内容 欢迎点赞 收藏 留言 如有错误敬请指正 交流讨论 欢迎加入我们一起学习 资源分享 耗时200 小时精选的 软件测试 资料包 最困难的时候 也就是我们离成功不远的时候 在使用jmeter进行接口测试时 我们难免会遇
  • C#与Java的不同

    https www cnblogs com Yan3399 p 17324904 html 1 C 对应java中关键字 base super this this sealed final 1 base关键字 对应java super C
  • 英伟达狂卖50万台GPU!AI爆火背后,是显卡的争夺

    据市场跟踪公司Omdia的统计分析 英伟达在第三季度大约卖出了50万台H100和A100 GPU 此前 Omdia通过英伟达第二季度的销售额 估计其大概卖出了900吨GPU 大语言模型火爆的背后 英伟达建立起了强大的显卡帝国 在人工智能的大
  • 搭建 ebpf 开发测试环境

    0 内容说明 这部分主要讲述了如何通过官网学习ebpf 以及如何搭建自己的ebpf开发测试环境 主要是需要安装哪些工具链 1 ebpf在线学习 ebpf官网中提供了一个快速在线学习ebpf的路径 在这个学习平台中一共有两项学习内容 一个是学
  • Perplexity发布两款LLM模型:pplx-7b-online和pplx-70b-online 可利用实时互联网数据查询

    Perplexity AI 一家创新的人工智能初创公司 近日推出了一项能够改变信息检索系统的解决方案 该公司推出了两款新的大语言模型 LLMs 分别是 pplx 7b online 和 pplx 70b online 标志着首次通过API公
  • 求最大公约数,和最小公倍数的规则

    求最大公约数 和最小公倍数的规则 最大公约数 Greatest Common Divisor 简称GCD 是指两个或多个整数共有约数中最大的一个 例如 12和18的最大公约数是6 因为12和18同时都能被6整除 求最大公约数的规则包括 辗转
  • js操作excel常用方法,js制作表格代码

    这篇文章主要介绍了js操作excel常用方法 具有一定借鉴价值 需要的朋友可以参考下 希望大家阅读完这篇文章后大有收获 下面让小编带着大家一起了解一下 本文基于react项目实现 起因 接了一个需求 要求实现点击页面上的一个按钮 复制某个表
  • Mongodb与MySQL的异同,使用场景,优缺点。。。

    Mongodb与MySQL的使用场景有什么不同 列出详细异同及各自的优缺点 两者对内在的要求如何 MongoDB与MySQL是两种不同类型的数据库管理系统 它们在使用场景 优缺点和内在要求上有很大的不同 使用场景的不同 MongoDB适合用
  • 如何查重复值【详细说明】

    大家好 今天来聊聊如何查重复值 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 如何查重复值 在数据处理和分析过程中 查重复值是一个常见的问题 小发猫写作 重复值会使得数据冗余 影响数据的准确性和可信度 为了
  • 自定义软件app定制开发的需求和趋势|企业网站小程序搭建

    自定义软件app定制开发的需求和趋势 企业网站小程序搭建 随着智能手机的普及和移动互联网的快速发展 移动应用程序 App 成为人们日常生活和工作中必不可少的一部分 然而 市面上已有的应用程序并不能完全满足用户的个性化需求 于是越来越多的人开
  • Linux下设置定时任务常用的三种方法

    在 Linux 系统中 设置定时任务是一项常见且重要的操作 它有助于自动化执行各种任务 如系统维护 备份和日志审计 Linux 提供了多种工具来安排这些自动化任务 其中最常用的三种方法是 Cron At 和 Systemd Timers 1
  • javascript中文文档下载,javascript中文文档

    大家好 小编来为大家解答以下问题 professional javascript for web developers javascript中文文档下载 现在让我们一起来看看吧 HTML 编辑器推荐 可以使用专业的 HTML 编辑器来编辑
  • 浅谈安科瑞网络电力仪表在斯里兰卡某项目的应用

    摘要 安科瑞APM系列网络仪表适用于高低压柜 进线以及出线处的全电量测量及监测 Absrtact APM series of network power meter are suitable for full power measureme
  • 一文2000字从0到1手把手教你jmeter分布式压测

    专注于分享软件测试干货内容 欢迎点赞 收藏 留言 如有错误敬请指正 交流讨论 欢迎加入我们一起学习 资源分享 耗时200 小时精选的 软件测试 资料包 最困难的时候 也就是我们离成功不远的时候 一 jmeter为什么要做分布式压测 jmet
  • 消费数据可视化大屏,助力金融机构智慧运维

    在今天的数字化时代 消费数据的可视化已经成为了一种重要的趋势 通过将消费数据以图表 图像等形式展现出来 可以帮助我们更直观地了解消费者的行为和趋势 同时 这也为企业提供了更多的分析和决策依据 无论是针对市场营销策略的制定 还是产品设计的优化
  • js中声明函数的三种方式,javascript声明变量的语句

    大家好 给大家分享一下javascript中函数如何声明及其作用 很多人还不知道这一点 下面详细解释一下 现在让我们来看看 类的声明以及使用 声明 先声明 再访问 函数声明会提升 类声明不会 类关键字 class YourName 类的主体