name属性与new.target属性

name属性:
1、类.name,输出的是类的名字。
2、如果是在类表达式中,类有名字,那么输出结果是类的名字;类没有名字的话,那么输出结果会是表达式中变量或者常量的名称。
            //name属性返回一个类的名字,在业务场景中基本上用不到的
class Person{ }
console.log(Person.name); //打印结果为Person //如果有类名,就返回类名而不是变量名;没有类名就会取前面的变量
const Humen = class P{ }
console.log(Humen.name); //打印结果为P



new.target属性:
1、new.target只能在构造函数中访问,返回类本身,指向的是使用new来实例化一个类的时候,new关键字后面的那个类。【比如new Car(),那new.target指向的就是Car这个类】
ES6的类是ES5的语法糖,也就是ES5中模拟类的另一种写法,是提供的另一种更为方便的写法。
2、ES5的普通构造函数(function)中也可使用new.target,若没有使用new来实例化function,则会返回undefind。
校验函数:判断普通函数是否被当作构造函数调用,即是否使用了new来实例化,有两种方法:
1)new.target ! == Car(函数名)
2)!(this instanceof Car)【this指向调用函数所返回的对象】
            //new.target不可以直接访问,只能在类,或者Es5的构造函数中访问得到
class Car{
constructor(){
console.log(new.target); //new.target实际上指向的是new关键字后面的那个类(或者函数)
}
} new Car();

//在es5中,如果一个函数前面加上一个new关键字去进行调用的话,那这个函数就会被当做一个构造函数,
//这也是在es5中去模拟一个类的核心,必须用构造函数模拟出一个类,把它作为一个类的入口
//语法糖
function Car1(){
//这是new.target比较重要的一个用法,在以前没有new.target的时候会使用instanceof去校验这个函数是否被当做构造函数去调用的
if(new.target !== Car1){
throw Error('必须使用new关键字调用Car')
}
}
//当我们用new这个关键字去调用一个函数的时候,那么这个函数就会被作为构造函数进行调用
new Car1()


//作为构造函数进行调用的时候,它的流程稍微跟普通的函数有点不太一样
function Car2(){
//函数是否被当做构造函数去进行调用
if(!( this instanceof Car2) ){
throw Error('必须')
}
}
new Car2()



ES6 class——name属性与new.target属性的更多相关文章

  1. HTML <a> 标签的 target 属性

    HTML <a> 标签的 target 属性 HTML <a> 标签 定义和用法 <a> 标签的 target 属性规定在何处打开链接文档. 如果在一个 <a ...

  2. 局部(或全局)设置<a>标签的target属性

            对于超链接<a>标签,target属性的设置是比较关键的,在不同的用户场景下选用适合的新页面载入方式,可以大大的提高访客的体验感.我们一般对target的设置可以挨个来,但 ...

  3. a标签的target属性

    _blank 浏览器总在一个新打开.未命名的窗口中载入目标文档. _self 这个目标的值对所有没有指定目标的 <a> 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源 ...

  4. 超链接a的target属性

    <a>标签的target意思很明确就是在哪里打开目标文档. 第一种情况: 默认情况:当我们没有设置超链接属性target的value值时默认是_self,即<a target=&qu ...

  5. android 中targetSdkVersion和与target属性的区别

    AndroidMenifest.xml中targetSdkVersion和project.properties中的target属性的区别      在AndroidMenifest.xml中,常常会有 ...

  6. Js document.frmLogin.action = '/login.htm';的意义和form表单的target属性

    一.解答:就是把 这个id名为frmLogin的form的提交地址改为上面的/login.htm <form id="frmLogin" name="frmLogi ...

  7. Html标签<a>的target属性

    target属性规定了在何处打开超链接的文档. 如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与这个目标吻合的框架或者 ...

  8. 关于a标签的target属性

    超级链接a的target属性已经是不被新规范支持了,其值有四个保留字: 1._blank      <a href="document.html" target=" ...

  9. HTML <base> 标签的 target 属性 —— <base target="_blank" />

    为页面上所有链接规定默认目标: <head> <base target="_blank" /> </head> <body> < ...

随机推荐

  1. RedHat7.4安装在个人电脑(笔记本)中安装遇到的问题总结

    RedHat7.4安装在个人电脑(笔记本)中安装 以下纯属个人在安装过程中遇到问题的一些总结,如果有描述不恰当的地方,还请给予指出,欢迎大家评论和交流. 物理主机的配置: 硬件配置: 华硕A456U笔 ...

  2. odoo14里面的用户登录log记录

    一.继承userlog,添加字段 # -*- coding: utf-8 -*- from odoo import models, fields, api from odoo.http import ...

  3. 第八篇 -- 对数据库mysql进行连接并压测

    参考链接:https://blog.csdn.net/laofashi2015/article/details/81296929 工具:mysql-8.0.12-winx64,apache-jmete ...

  4. 华为视频编辑服务(Video Editor Kit),助力开发者高效构建应用视频编辑能力

    视频编辑服务(Video Editor Kit)是华为开放给开发者快速构建视频编辑能力的服务,提供视频导入.编辑处理.特效渲染.视频导出.媒体资源管理等一站式视频处理能力.视频编辑服务为全球开发者提供 ...

  5. jvm源码解读--11 ldc指令的解读

    写一个java文件 public static void main(String[] args) { String str1="abc"; String str2 ="a ...

  6. html拖动元素排序(插件版)

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  7. ES11中的bigint

    上一周小编因为自己的事情,没有持续更新,还望大家谅解,趁着今天醒得早,小编继续和大家学(si)习(ke)es11中的新语法.在js中,对整数类型的数据,存在着最大极限,这个极限就是 const max ...

  8. .Netcore HttpClient源码探究

    源码搜索与概述 搜索HttpClient源码 https://source.dot.net/#System.Net.Http/System/Net/Http/HttpClient.cs 1.HttpC ...

  9. RationalRose使用

    UML 概述 什么是 UML? Unified Modeling Language (UML)又称统一建模语言或标准建 模语言,是始于 1997 年一个 OMG 标准,它是一个支持模型化 和软件系统开 ...

  10. Linux进程理解与实践(三)进程终止函数和exec函数族的使用

    进程的几种终止方式(Termination) (1)正常退出 从main函数返回[return] 调用exit 调用_exit或者_Exit 最后一个线程从其启动处返回 从最后一个线程调用pthrea ...