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相关推荐

  1. 互联网人群画像和你所不知道的真相

    作为新时代互联网营销的关键部分,人群画像引起了诸多兴趣,近年颇为风靡.几乎所有的互联网广告供应商都不约而同的强调,他们有足够精确的人群画像数据,确保能够找到广告主真正的受众.但是事情果真如此吗?人群画 ...

  2. 你绝对不知道的head标签

    你绝对不知道的head标签 先来梳理一下本文的目录结构 现在我将详解head标签和它六个子标签的属性和作用,请耐心看完,会有很大的收获哦! 一.head标签 可选属性: 属性 值 描述 profile ...

  3. 酷炫时钟_您不知道的11种酷炫形状

    酷炫时钟 Whether it's in nature, architecture or the products we use, cool shapes are everywhere around ...

  4. 20个你不得不知道的数组reduce高级用法

    目录 1 背景 2 高级用法 3 兼容和性能 4 结语 1 背景 reduce 作为ES5新增的常规数组方法之一,对比 forEach .filter 和 map,在实际使用上好像有些被忽略,发现身边 ...

  5. ES6 你可能不知道的事 – 基础篇

    ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/ 序 ES6,或许应该叫 ES ...

  6. 考csp所需算法_CSP vs RxJS:您所不知道的。

    考csp所需算法 by Kevin Ghadyani 通过凯文·加迪亚尼(Kevin Ghadyani) CSP vs RxJS:您所不知道的. (CSP vs RxJS: what you don' ...

  7. 苹果小圆点怎么关闭_苹果手机连按2下屏幕,就能自动截图,不知道的来学一学...

    苹果手机连按2下屏幕,就能自动截图,不知道的来学一学 很多苹果用户都羡慕安卓手机,可以花式截屏,不仅支持局部截屏还可以长截屏. 其实苹果手机的截屏方式也可以很炫酷,今天就来教大家一招,连按2下手机屏幕 ...

  8. 那些你所不知道的arXiv使用技巧

    作者:Tom Hardy Date:2020-12-23 来源:那些你所不知道的arXiv使用技巧

  9. 你可能不知道的Shell

    Shell也叫做命令行界面,它是*nix操作系统下用户和计算机的交互界面.Shell这个词是指操作系统中提供访问内核服务的程序. 这篇文章向大家介绍Shell一些非广为人知.但却实用有趣的知识,权当品 ...

最新文章

  1. vue+ivew-admin开发项目,内存占用过大解决办法
  2. 激光光凝后容易出现频繁闪光的原因
  3. jsp里加java代码,利用静态内部类为您的代码添加辅助功能-JSP教程,Java技巧及代码...
  4. 装修材料石膏线品牌加盟类织梦模板
  5. contains an expression but should be a constant
  6. 《华为工作法》学习笔记
  7. sqlsever2012评估期已过
  8. 考研复习 求解函数极限的方法全总结
  9. C# Winform多语言切换
  10. python sklearn包中的主成分分析_九、Sklearn主成分分析
  11. 腾讯云对象储存-图片上传-删除图片
  12. 局域网雨云蠕虫病毒的处理
  13. wrcoef2函数_matlab中二维小波变换部分函数
  14. Blender插件天空地形山水自然环境生成器 TerrainScapes V2.0
  15. 基础知识------我所知道的、应该知道的
  16. Windows独享主机如何查看服务器系统日志?
  17. 参数函数 matlab,MATLAB的函数参数
  18. 换一个地方也许国产WPS OFFICE 会重夺办公软件霸主!
  19. 蓝桥杯 算法训练 ALGO-128 Cowboys 递推、动态规划
  20. 热图(Heatmap)绘制(matplotlib与seaborn)

热门文章

  1. 指针数组,数组指针,函数指针,指针函数,函数指针数组
  2. 基于matlab支持向量机SVM多分类手写体数字识别
  3. UC伯克利马毅七年力作!700页新书探究低维模型与高维数据分析
  4. 编写程序计算长方体的体积python_【自学编程】C语言编程简单的小程序,计算长方体体积!...
  5. 科技公司揭露撑持权力
  6. Opencv3学习笔记(C++Python双语)---视屏读取与保存
  7. N76E003开发笔记(关于使用N76E003过程遇到的问题)
  8. 阿里巴巴收购网易考拉,定了!
  9. Nginx命令stop或者quit停止服务器无效失效
  10. equal 和 ==