JavaScript简餐——类,那个男人回来了!
文章目录
- 前言
- 一、类
- 二、类定义
- 三、总结
前言
写本《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简餐——类,那个男人回来了!相关推荐
- JavaScript简餐——类构造函数
文章目录 前言 一.类的构造函数及其实例化 二.把类当成特殊函数 三.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计(第 ...
- JavaScript简餐——关于类的继承
文章目录 前言 一.继承基础 二.super关键字 三.抽象基类 四.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计(第 ...
- JavaScript简餐——寄生组合继承
文章目录 前言 一.什么是寄生组合继承? 二.寄生组合继承的基本模式 三.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计 ...
- JavaScript简餐——细看函数的参数
文章目录 前言 一.理解参数 二.箭头函数中的参数 三.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序设计(第4版)> ...
- JavaScript简餐——代理Proxxy与反射(三)
文章目录 前言 一.跟踪属性访问 二.隐藏属性 三.属性验证 四.函数与构造函数参数验证 五.数据绑定与可观察对象 总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学 ...
- JavaScript简餐——那些函数属性与方法(call、apply和bind)
文章目录 前言 一.arguments对象的callee属性 二.函数的caller属性 三.new.target 四.call.apply和bind方法 1.call方法 2.apply方法 3.b ...
- JavaScript简餐——代理Proxxy与反射(二)
文章目录 前言 一.可撤销代理 二.代理另一个代理 三.代理的问题与不足 四.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<JavaScript高级程序 ...
- JavaScript简餐——关于盗用构造函数
文章目录 前言 一.什么是盗用构造函数? 二.使用实例 三.参数传递 四.盗用构造函数的问题所在 五.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在阅读学习<Ja ...
- JavaScript简餐——闭包
文章目录 前言 一.闭包概念 二.闭包的副作用 三.闭包的用途 1.在函数外部读取函数的内部变量 2.利用外部函数变量缓存值 四.总结 前言 写本<JavaScript简餐>系列文章的目的 ...
最新文章
- 小程序开发总结一:mpvue框架及与小程序原生的混搭开发
- centos7 yum下载路径
- 画胖小人和瘦小人,建造者模式版本
- jzoj3188-找数【质数筛,数论】
- tensorflow 启动多个session_Tensorflow源码解析7 -- TensorFlow分布式运行时
- 蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统
- msg_p!=(void*) 0 --消息邮箱(点滴学习)
- 2017android 最强旗舰,2017年世界六大旗舰机,华为第五,第一惊艳全球!
- 手写 Promise.race
- Error:Trailing spaces not allowed no-trailing-spaces
- 漫画:如何给初学者讲“为什么计算机只认识 0 和 1”?
- Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件
- Linux下ip route、ip rule、iptables的关系(转
- 实景三维数据也可以免费下载
- Navicat Premium相关注册码
- Hbase 二级索引
- “狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
- 逃离北上广?程序员的北漂生活
- 得到头条【四线城市宜宾,靠什么逆袭?】
- java毕业设计二手商品交易网站mp4Mybatis+系统+数据库+调试部署
热门文章
- ps4数据库和html,PS4《原神》试玩:争议之外,究竟学到了哪些东西?
- 麦金塔计算机颜色,苹果FaceID笑脸图标竟来自几十年前的电脑开机画面!
- 不允许输入某些非法字符或者敏感字符
- Python 的 RST 文件是什么
- 电影推荐系统项目 介绍(一)
- Unity iOS 之 [iOS]App上架流程[利用Archive进行上传]
- 怎样在html中判断数据类型,js/vue/react 如何在这种数据格式里判断是否有相同的id...
- Spark读CSV文件
- 在山雨飘摇中,且停且走
- PHP面向对象之封装