英文 | https://www.javascripttutorial.net

翻译 | 杨小爱

在今天的文章中,我们将一起来学习 JavaScript 静态方法以及如何有效地使用它们。

JavaScript 静态方法介绍

根据定义,静态方法绑定到一个类,而不是该类的实例。因此,静态方法对于定义帮助程序或实用程序方法很有用。

要在 ES6 之前定义静态方法,直接将其添加到类的构造函数中。例如,假设我们有一个 Person 类型,如下所示:

function Person(name) {this.name = name;
}Person.prototype.getName = function () {return this.name;
};

下面将一个名为 createAnonymous() 的静态方法添加到 Person 类型:

Person.createAnonymous = function (gender) {let name = gender == "male" ? "John Doe" : "Jane Doe";return new Person(name);
};

createAnonymous() 方法被认为是静态方法,因为它的属性值不依赖于 Person 类型的任何实例。

要调用 createAnonymous() 方法,请使用 Person 类型而不是其实例:

var anonymous = Person.createAnonymous();

ES6 中的 JavaScript 静态方法

在 ES6 中,我们使用 static 关键字定义静态方法。以下示例为 Person 类定义了一个名为 createAnonymous() 的静态方法:

class Person {constructor(name) {this.name = name;}getName() {return this.name;}static createAnonymous(gender) {let name = gender == "male" ? "John Doe" : "Jane Doe";return new Person(name);}
}

要调用静态方法,请使用以下语法:

let anonymous = Person.createAnonymous("male");

如果你试图从类的实例调用静态方法,你会得到一个错误。例如:

let person = new Person('James Doe');
let anonymous = person.createAnonymous("male");

错误:

TypeError: person.createAnonymous is not a function

从类构造函数或实例方法调用静态方法

要从类构造函数或实例方法调用静态方法,请使用类名,后跟 . 和静态方法:

className.staticMethodName();

或者,可以使用以下语法:

this.constructor.staticMethodName();

总结

  • JavaScript 静态方法在类的实例之间共享。因此,它们与类绑定。

  • 通过类名调用静态方法,而不是该类的实例。

  • 使用 className.staticMethodName() 或 this.constructor.staticMethodName() 调用类构造函数或实例方法中的静态方法。

更多教程

【ES6 教程】第四章 ES6类03—学习另一种使用类表达式定义新类的方法

【ES6 教程】第四章 ES6类02—JavaScript Getter 和 Setter

【ES6 教程】第四章 ES6类01—语法以及如何声明一个类

【ES6 教程】第三章 全面了解 ES6 模块

【ES6 教程】第2章 解构01—如何将数组的元素分配给变量

【ES6 教程】第一章 新的ES6语法10—如何替换字符串中的变量

【ES6 教程】第一章 新的ES6语法09—八进制和二进制字面量

【ES6 教程】第一章 新的ES6语法08— for…of 循环

【ES6 教程】第一章 新的ES6语法07—ES6 提供了一种定义对象字面量的新方法

【ES6 教程】第一章 新的ES6语法06—JavaScript 扩展运算符

【ES6 教程】第一章 新的ES6语法05—REST 参数以及如何有效地使用它们

【ES6 教程】第一章 新的ES6语法04—如何设置函数参数的默认值

【ES6 教程】第一章 新的ES6语法03—使用const 关键字定义常量

【ES6 教程】第一章 新的ES6语法02—var 和 let 的区别

【ES6 教程】第一章 新的ES6语法01—let:使用let关键字声明块范围的变量

学习更多技能

请点击下方公众号

【ES6 教程】第四章 ES6类04—如何定义与类关联的方法相关推荐

  1. 【ES6 教程】第一章 新的ES6语法04—如何设置函数参数的默认值

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本节教程中,我们将学习如何在 ES6 中处理 JavaScript 默认参数. TL;DR func ...

  2. 【ES6 教程】第一章 新的ES6语法03—使用const 关键字定义常量

    英文 | https://www.javascripttutorial.net 翻译 | 杨小爱 在本教程中,我们将学习如何使用 JavaScript const 关键字定义常量. JavaScrip ...

  3. C# 图解教程 第四章 类的基本概念

    类的基本概念 类的概述 声明类 类成员 字段 方法 创建变量和类的实例 为数据分配内存 实例成员 访问修饰符 私有访问和公用访问 从类的内部访问成员 从类的外部访问成员 综合应用 类的基本概念 类的概 ...

  4. matlab图形绘制经典案例,MATLAB经典教程第四章_图形绘制.ppt

    <MATLAB经典教程第四章_图形绘制.ppt>由会员分享,可在线阅读,更多相关<MATLAB经典教程第四章_图形绘制.ppt(32页珍藏版)>请在人人文库网上搜索. 1.Ma ...

  5. 【面向对象编程】(2) 类属性的定义及使用;__repr__()方法

    各位同学好,在上一节中我们学习了类实例化的基本方法:https://blog.csdn.net/dgvv4/article/details/122275348?spm=1001.2014.3001.5 ...

  6. Java练习题 类 先创建一个Point类,然后定义Trianglele类。在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,然后定义两个方法求三角形的周长、面积。

    先创建一个Point类,然后定义Trianglele类. 在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,再定义构造方法对这三个点进行初始化,然后定义两个方法求三角形的周长 ...

  7. python核心教程_python核心教程--第四章

    第四章讲的是python对象. 4.1 python对象 所有的python对象都拥有三个特性:身份,类型和值 身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得 ...

  8. python编程案例教程第四章_Python编程入门-第四章 流程控制 -学习笔记

    第四章 流程控制 一.布尔逻辑 *在Python中,用True和False表示真值.一般使用4个主要的逻辑运算符来组合形成布尔值:not\and\or\==. 如: False==False #Tru ...

  9. 计算化学系列教程-第四章-一维谐振子

    第四章-一维谐振子 本次有3节课程,分别为: 4.1 一维谐振子 https://v.qq.com/x/page/a0902106f9h.html?ptag=qqbrowser 4.2 原子的振动 h ...

最新文章

  1. Extranet MPLS ×××
  2. 剑指Offer_29_最小的K个数
  3. Linux(12)-命令行的使用,shell脚本
  4. VUE项目中 获得多个复选框 checkbox 选中的值(jquery)+ 解决 Uncaught TypeError: Cannot read property ‘push‘ of undefine
  5. html画布360图案填充_在Photoshop中创建带有图案的抽象设计
  6. 等待队列中为什么需要互斥锁?一个线程在等待时被唤醒后会做什么?安全队列的代码实现
  7. 如何搭建高性能视频网站
  8. java读取配置文件
  9. SQLServer查询最近一天,三天,一周,一月,一季度方法
  10. [Flex]实现Application未初始化前加载自定义配置内容
  11. laravel连接多个不同数据库的单例类
  12. 【SSH网上商城项目实战28】使用Ajax技术局部更新商品数量和总价
  13. 完成图书管理系统类图的绘制_如何在线免费绘制各类图形
  14. 电脑主板原理图讲解(电脑主板构造图文详解)CPU和北桥芯片(随着发展有的北桥已经被设计到CPU内部了)南桥芯片
  15. Axure可视化原型模板+大数据图表组件 提升您的设计效率 做出甲方买不起的样子
  16. android开发连接手机usb调试模式,安卓手机usb调试在哪里 安卓手机usb调试模式设置教程...
  17. 六 Python 字典与集合
  18. angular引入ng-zorro中的icon图标方法
  19. APPInventor网络数据库浏览器(TinyWebDB查询API)
  20. java动漫网站开题报告_动漫影响及其研究开题报告

热门文章

  1. 惠普HP LaserJet P4510 打印机驱动
  2. php uv pv,SEO中IP、UV和PV的定义与区别?
  3. 【基础教学】UiBot的下载、安装与使用
  4. 性能优化之图片压缩(质量压缩、尺寸压缩)
  5. 动环监控4大优势,你知道几个?
  6. c语言调用bios下的串口,CFREE4中没有BIOS.H,无法开串口,该怎么做??
  7. eNSP-网络知识学习笔记-路由备份
  8. 【有奖观看】Imagination中国区技术总监全面解读 IMG DXT GPU
  9. 国产神器天语Android双核手机W700线下赏机经历
  10. 华为p9plus误删文件怎么恢复