ES6 class——name属性与new.target属性
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属性的更多相关文章
- HTML <a> 标签的 target 属性
HTML <a> 标签的 target 属性 HTML <a> 标签 定义和用法 <a> 标签的 target 属性规定在何处打开链接文档. 如果在一个 <a ...
- 局部(或全局)设置<a>标签的target属性
对于超链接<a>标签,target属性的设置是比较关键的,在不同的用户场景下选用适合的新页面载入方式,可以大大的提高访客的体验感.我们一般对target的设置可以挨个来,但 ...
- a标签的target属性
_blank 浏览器总在一个新打开.未命名的窗口中载入目标文档. _self 这个目标的值对所有没有指定目标的 <a> 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源 ...
- 超链接a的target属性
<a>标签的target意思很明确就是在哪里打开目标文档. 第一种情况: 默认情况:当我们没有设置超链接属性target的value值时默认是_self,即<a target=&qu ...
- android 中targetSdkVersion和与target属性的区别
AndroidMenifest.xml中targetSdkVersion和project.properties中的target属性的区别 在AndroidMenifest.xml中,常常会有 ...
- Js document.frmLogin.action = '/login.htm';的意义和form表单的target属性
一.解答:就是把 这个id名为frmLogin的form的提交地址改为上面的/login.htm <form id="frmLogin" name="frmLogi ...
- Html标签<a>的target属性
target属性规定了在何处打开超链接的文档. 如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与这个目标吻合的框架或者 ...
- 关于a标签的target属性
超级链接a的target属性已经是不被新规范支持了,其值有四个保留字: 1._blank <a href="document.html" target=" ...
- HTML <base> 标签的 target 属性 —— <base target="_blank" />
为页面上所有链接规定默认目标: <head> <base target="_blank" /> </head> <body> < ...
随机推荐
- Vue全局引入JS的方法
两种情况: 1. js为ES5的写法时,如下(自定义的my.js): function fun(){ console.log('hello'); } Vue中的全局引入方式为,在index.html中 ...
- Windows下删除顽固文件夹
参考链接: https://www.cnblogs.com/azbane/p/9808802.html 第一步:修改当前文件夹所有者为管理员 takeown /f * /a /r 第二步:修改管理员权 ...
- Cypress 高级用法系列 一
1. Multiple Assertions cy .get('[data-cy=task]') .then( item => { expect(item[0]).to.contain.text ...
- ElasticSearch简介和快速实战
ElasticSearch简介和快速实战 ElasticSearch与Lucene Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库(框架) 但是想要使用Lucene,必须使用 ...
- vue知识点---element el-date-picker 插件默认时间属性default-value怎么赋值?
参考网址: http://www.imooc.com/wenda/detail/509359 默认值,你放到 v-model里面就好. v-model="time" data(){ ...
- Couchdb 任意命令执行漏洞(CVE-2017-12636)
影响版本:小于 1.7.0 以及 小于 2.1.1 该漏洞是需要登录用户方可触发,如果不知道目标管理员密码,可以利用CVE-2017-12635先增加一个管理员用户 依次执行如下请求即可触发任意命令执 ...
- RTB1靶机
一.信息收集 信息收集 http://192.168.111.132/Hackademic_RTB1/?cat=1 http://192.168.111.132/Hackademic_RTB1/?ca ...
- 大数据学习(04)——MapReduce原理
前两篇文章介绍了HDFS的原理和高可用,下面再来介绍Hadoop的另外一个模块MapReduce.它的思想是很多技术的鼻祖,值得一学. MapReduce是什么 MapReduce是一个分布式计算系统 ...
- IO多路复用详解
假如你想了解IO多路复用,那本文或许可以帮助你 本文的最大目的就是想要把select.epoll在执行过程中干了什么叙述出来,所以具体的代码不会涉及,毕竟不同语言的接口有所区别. 基础知识 IO多路复 ...
- Nacos 自动更新配置不生效问题
版本 Nacos 1.4.1 SpringCloud 2020.0.3 解决方案 bootstrap.properties 增加应用名配置即可 spring.application.name=serv ...