你可能不知道的 new.target
new 是构造函数生成实例的命令, ES6为 new 命令引入了 new.target属性。这个属性用于确定构造函数是怎么调用的。
在构造函数中, 如果一个构造函数不是通过 new
操作符调用的, new.target
会返回 undefined。
使用场景
如果一个构造函数不通过 new 命令生成实例, 就报错提醒
es5中是这样做的:
function Shape(options) {if (this instanceof Shape) {this.options = options} else {// 要么手动给它创建一个实例并返回// return new Shape(options)// 要么提醒throw new Error('Shape 构造函数必须使用 new 操作符')}}
es6中可以这样做:
function Shape(options) {// if (new.target !== 'undefined') {} 必须要在 constructor中使用 new.target, 在这里判断会报错constructor(options) {if (new.target !== 'undefined') {this.options = options} else {throw new Error('必须使用 new 操作符')}}}
以上代码通过 new.target 属性判断返回的是不是undefined即可知道这个构造函数是不是通过 new 操作符调用
一个构造函数只能用于子类继承, 自身不能 new
new.target这个属性,当子类继承父类会返回子类的构造函数名称
class Parent {constructor() {console.log(new.target)}}class Child extends Parent {constructor() {super()}}// Child
以上代码 Child子类继承父类, 那么父类构造函数中的 new.target 是子类构造函数的名称。
规定构造函数只能用于继承
class Zoo {constructor() {if (new.target === Zoo) throw new Error('Zoo构造函数只能用于子类继承')}}const zoo = new Zoo() // 报错class Dog extends Zoo {constructor() {super()} }const dog = new Dog() // 不报错
tip : new.target 在外部使用会报错
转载于:https://www.cnblogs.com/qiqingfu/p/10206477.html
你可能不知道的 new.target相关推荐
- 互联网人群画像和你所不知道的真相
作为新时代互联网营销的关键部分,人群画像引起了诸多兴趣,近年颇为风靡.几乎所有的互联网广告供应商都不约而同的强调,他们有足够精确的人群画像数据,确保能够找到广告主真正的受众.但是事情果真如此吗?人群画 ...
- 你绝对不知道的head标签
你绝对不知道的head标签 先来梳理一下本文的目录结构 现在我将详解head标签和它六个子标签的属性和作用,请耐心看完,会有很大的收获哦! 一.head标签 可选属性: 属性 值 描述 profile ...
- 酷炫时钟_您不知道的11种酷炫形状
酷炫时钟 Whether it's in nature, architecture or the products we use, cool shapes are everywhere around ...
- 20个你不得不知道的数组reduce高级用法
目录 1 背景 2 高级用法 3 兼容和性能 4 结语 1 背景 reduce 作为ES5新增的常规数组方法之一,对比 forEach .filter 和 map,在实际使用上好像有些被忽略,发现身边 ...
- ES6 你可能不知道的事 – 基础篇
ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/ 序 ES6,或许应该叫 ES ...
- 考csp所需算法_CSP vs RxJS:您所不知道的。
考csp所需算法 by Kevin Ghadyani 通过凯文·加迪亚尼(Kevin Ghadyani) CSP vs RxJS:您所不知道的. (CSP vs RxJS: what you don' ...
- 苹果小圆点怎么关闭_苹果手机连按2下屏幕,就能自动截图,不知道的来学一学...
苹果手机连按2下屏幕,就能自动截图,不知道的来学一学 很多苹果用户都羡慕安卓手机,可以花式截屏,不仅支持局部截屏还可以长截屏. 其实苹果手机的截屏方式也可以很炫酷,今天就来教大家一招,连按2下手机屏幕 ...
- 那些你所不知道的arXiv使用技巧
作者:Tom Hardy Date:2020-12-23 来源:那些你所不知道的arXiv使用技巧
- 你可能不知道的Shell
Shell也叫做命令行界面,它是*nix操作系统下用户和计算机的交互界面.Shell这个词是指操作系统中提供访问内核服务的程序. 这篇文章向大家介绍Shell一些非广为人知.但却实用有趣的知识,权当品 ...
最新文章
- vue+ivew-admin开发项目,内存占用过大解决办法
- 激光光凝后容易出现频繁闪光的原因
- jsp里加java代码,利用静态内部类为您的代码添加辅助功能-JSP教程,Java技巧及代码...
- 装修材料石膏线品牌加盟类织梦模板
- contains an expression but should be a constant
- 《华为工作法》学习笔记
- sqlsever2012评估期已过
- 考研复习 求解函数极限的方法全总结
- C# Winform多语言切换
- python sklearn包中的主成分分析_九、Sklearn主成分分析
- 腾讯云对象储存-图片上传-删除图片
- 局域网雨云蠕虫病毒的处理
- wrcoef2函数_matlab中二维小波变换部分函数
- Blender插件天空地形山水自然环境生成器 TerrainScapes V2.0
- 基础知识------我所知道的、应该知道的
- Windows独享主机如何查看服务器系统日志?
- 参数函数 matlab,MATLAB的函数参数
- 换一个地方也许国产WPS OFFICE 会重夺办公软件霸主!
- 蓝桥杯 算法训练 ALGO-128 Cowboys 递推、动态规划
- 热图(Heatmap)绘制(matplotlib与seaborn)
热门文章
- 指针数组,数组指针,函数指针,指针函数,函数指针数组
- 基于matlab支持向量机SVM多分类手写体数字识别
- UC伯克利马毅七年力作!700页新书探究低维模型与高维数据分析
- 编写程序计算长方体的体积python_【自学编程】C语言编程简单的小程序,计算长方体体积!...
- 科技公司揭露撑持权力
- Opencv3学习笔记(C++Python双语)---视屏读取与保存
- N76E003开发笔记(关于使用N76E003过程遇到的问题)
- 阿里巴巴收购网易考拉,定了!
- Nginx命令stop或者quit停止服务器无效失效
- equal 和 ==