文章目录

  • 前言
  • 一、类
  • 二、类定义
  • 三、总结

前言

写本《JavaScript简餐》系列文章的目的是记录在阅读学习《JavaScript高级程序设计(第4版)》一书时出现的各个知识点。虽是对读书的笔记和总结,但是希望它轻量、简洁、犀利,不会引起阅读疲劳,可以在碎片化时间和闲暇之余轻巧地沐浴一下知识点。每篇文章只针对一个小部分进行讲解式的梳理,来达到个人复习总结和分享知识的目的。


一、类

诸如C++和JAVA这类语言它们都有类这么一说,可以用来封装自己的类型。JavaScript也不能说没有,只不过一直以来都是用function()和ES5的特性来强撑出来一个这么一个“类”,但就是总感觉别扭,觉得它还不太正宗!正因如此,实现继承的代码也显得非常冗长和混乱,活像一锅东北铁锅炖。为解决这些问题,ES6中新引入了class关键字,具有正式定义类的能力。是的,那个男人回来了。虽然ES6的类表面上看起来可以支持正式的面向对象编程,但实际上它背后使用的仍然是原型和构造函数的概念,是ES中新的基础性语法糖。


二、类定义

与函数类型相似,定义类也有两种主要方式:类声明和类表达式。这两种方式都使用class关键字加大括号。如下面的代码所示

class Person {}
const Person = class {}; // 都可以

与函数表达式类似,类表达式在它们被求值前也不能引用。不过,与函数定义不同的是,虽然函数声明可以提升,但类定义不能。下面的示例给出了演示:

console.log(FunctionDeclaration); // [Function: FunctionDeclaration]
function FunctionDeclaration() {}console.log(ClassExpression);  // ReferenceError: Cannot access 'ClassExpression' before initialization
class ClassExpression {}

如此,函数提前使用没问题,会打印出相关信息,但是类要是在初始化前使用,那就会报ReferenceError错误。 另一个函数与类不同的地方是函数受作用域限制,但是类会受到块作用域限制。如下所示:

{function FunctionDeclaration() {}class ClassExpression {}
}console.log(FunctionDeclaration); // [Function: FunctionDeclaration]
console.log(ClassExpression);  // ReferenceError: ClassExpression is not defined

像这样,如果将类定义在一个块中,在块的外部访问时,打印信息直接告诉我们没有定义类。 再来看一下类的构成,类可以包含构造函数方法、实例方法、获取函数、设置函数和静态类方法,不过类中不包含这些也同样有效。如下所示:

class Person() {}; //空类定义,有效class Person {constructor() {} // 可以有构造函数
}class Person {sayName() {} // 可以有实例方法
}class Person {get myName() {} // 可以有获取函数
}class Person {set myName(name) {} // 可以有设置函数
}class Person {static sayName() {} // 可以有静态方法
}

默认情况下类定义中的代码都会在严格模式下执行。类名建议首字母要大写,以区别于通过它创建的实例。(例如通过Class Person {}创建person实例)。 类表达式是可选的。在把类表达式赋值给变量后,可以通过name属性获取类表达式的名称字符串。但不能在类表达式作用域外部访问这个标识符。如下所示:

let Person = class PersonName {sayClassName () {console.log(Person.name, PersonName.name);}
}let p = new Person();p.sayClassName(); // PersonName PersonNameconsole.log(Person.name); // PersonName
console.log(PersonName.name); // ReferenceError: PersonName is not defined

三、总结

以上就是今天要讲的内容,今天简单地介绍了一下类的概念、类的定义方法、类的提升限制、类的作用域限制、以及类的构成和获取name标识符时要注意的作用域限制。下一篇我们来介绍一下类构造函数。撒花~

JavaScript简餐——类,那个男人回来了!相关推荐

  1. JavaScript简餐——类构造函数

    文章目录 前言 一.类的构造函数及其实例化 二.把类当成特殊函数 三.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计(第 ...

  2. JavaScript简餐——关于类的继承

    文章目录 前言 一.继承基础 二.super关键字 三.抽象基类 四.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计(第 ...

  3. JavaScript简餐——寄生组合继承

    文章目录 前言 一.什么是寄生组合继承? 二.寄生组合继承的基本模式 三.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计 ...

  4. JavaScript简餐——细看函数的参数

    文章目录 前言 一.理解参数 二.箭头函数中的参数 三.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计(第4版)> ...

  5. JavaScript简餐——代理Proxxy与反射(三)

    文章目录 前言 一.跟踪属性访问 二.隐藏属性 三.属性验证 四.函数与构造函数参数验证 五.数据绑定与可观察对象 总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学 ...

  6. JavaScript简餐——那些函数属性与方法(call、apply和bind)

    文章目录 前言 一.arguments对象的callee属性 二.函数的caller属性 三.new.target 四.call.apply和bind方法 1.call方法 2.apply方法 3.b ...

  7. JavaScript简餐——代理Proxxy与反射(二)

    文章目录 前言 一.可撤销代理 二.代理另一个代理 三.代理的问题与不足 四.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序 ...

  8. JavaScript简餐——关于盗用构造函数

    文章目录 前言 一.什么是盗用构造函数? 二.使用实例 三.参数传递 四.盗用构造函数的问题所在 五.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<Ja ...

  9. JavaScript简餐——闭包

    文章目录 前言 一.闭包概念 二.闭包的副作用 三.闭包的用途 1.在函数外部读取函数的内部变量 2.利用外部函数变量缓存值 四.总结 前言 写本<JavaScript简餐>系列文章的目的 ...

最新文章

  1. 小程序开发总结一:mpvue框架及与小程序原生的混搭开发
  2. centos7 yum下载路径
  3. 画胖小人和瘦小人,建造者模式版本
  4. jzoj3188-找数【质数筛,数论】
  5. tensorflow 启动多个session_Tensorflow源码解析7 -- TensorFlow分布式运行时
  6. 蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统
  7. msg_p!=(void*) 0 --消息邮箱(点滴学习)
  8. 2017android 最强旗舰,2017年世界六大旗舰机,华为第五,第一惊艳全球!
  9. 手写 Promise.race
  10. Error:Trailing spaces not allowed no-trailing-spaces
  11. 漫画:如何给初学者讲“为什么计算机只认识 0 和 1”?
  12. Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件
  13. Linux下ip route、ip rule、iptables的关系(转
  14. 实景三维数据也可以免费下载
  15. Navicat Premium相关注册码
  16. Hbase 二级索引
  17. “狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
  18. 逃离北上广?程序员的北漂生活
  19. 得到头条【四线城市宜宾,靠什么逆袭?】
  20. java毕业设计二手商品交易网站mp4Mybatis+系统+数据库+调试部署

热门文章

  1. ps4数据库和html,PS4《原神》试玩:争议之外,究竟学到了哪些东西?
  2. 麦金塔计算机颜色,苹果FaceID笑脸图标竟来自几十年前的电脑开机画面!
  3. 不允许输入某些非法字符或者敏感字符
  4. Python 的 RST 文件是什么
  5. 电影推荐系统项目 介绍(一)
  6. Unity iOS 之 [iOS]App上架流程[利用Archive进行上传]
  7. 怎样在html中判断数据类型,js/vue/react 如何在这种数据格式里判断是否有相同的id...
  8. Spark读CSV文件
  9. 在山雨飘摇中,且停且走
  10. PHP面向对象之封装