es6 Class 的 new.target 属性
Class 的 new.target 属性
new
是从构造函数生成实例对象的命令。ES6 为new
命令引入了一个new.target
属性,该属性一般用在构造函数之中,返回new
命令作用于的那个构造函数。如果构造函数不是通过new
命令调用的,new.target
会返回undefined
,因此这个属性可以用来确定构造函数是怎么调用的。
function Person(name) {
if (new.target !== undefined) {
this.name = name;
} else {
throw new Error('必须使用 new 命令生成实例');
}
}
// 另一种写法
function Person(name) {
if (new.target === Person) {
this.name = name;
} else {
throw new Error('必须使用 new 命令生成实例');
}
}
var person = new Person('张三'); // 正确
var notAPerson = Person.call(person, '张三'); // 报错
上面代码确保构造函数只能通过new
命令调用。
Class 内部调用new.target
,返回当前 Class。
class Rectangle {
constructor(length, width) {
console.log(new.target === Rectangle);
this.length = length;
this.width = width;
}
}
var obj = new Rectangle(3, 4); // 输出 true
需要注意的是,子类继承父类时,new.target
会返回子类。
class Rectangle {
constructor(length, width) {
console.log(new.target === Rectangle);
// ...
}
}
class Square extends Rectangle {
constructor(length) {
super(length, length);
}
}
var obj = new Square(3); // 输出 false
上面代码中,new.target
会返回子类。
利用这个特点,可以写出不能独立使用、必须继承后才能使用的类。
class Shape {
constructor() {
if (new.target === Shape) {
throw new Error('本类不能实例化');
}
}
}
class Rectangle extends Shape {
constructor(length, width) {
super();
// ...
}
}
var x = new Shape(); // 报错
var y = new Rectangle(3, 4); // 正确
上面代码中,Shape
类不能被实例化,只能用于继承。
注意,在函数外部,使用new.target
会报错。
es6 Class 的 new.target 属性相关推荐
- Hyperlink的target属性的用法
大家可以看一下asp.net 的 ASP.NET Articles -- Updated Daily! ,点击链接在新窗口中打开某一篇文章,不要关闭打开的新窗口,点击另外一篇文章的链接,可以发现新的链 ...
- HTML的target属性中_blank、_self、_parent、_top含义
_blank 浏览器会另开一个新窗口显示链接_self,在同一框架或窗口中打开所链接的文档. 此参数为默认值,通常不用指定. _parent,将链接的文件载入含有该链接框架的父框架集或父窗口中. 如果 ...
- a href a/target属性讲解
<a></a> target属性 The target attribute specifies where to open the linked document: <a ...
- 如果希望单击超链接打开新的html,【单选题】如果希望单击超链接打开新的html页面,则需将target属性设置为
A. _blank B. _top C. _parent D. _self...
[单选题]如果希望单击超链接打开新的html页面,则需将target属性设置为 A. _blank B. _top C. _parent D. _self 更多相关问题 一个球状蛋白质,含100个氨基 ...
- A href中target属性的用法
A href中target属性的用法 target这个属性指定所链接的页面在浏览器窗口中的打开方式, 它的参数值主要有:_blank._parent._self._top,这些参数值代表的含义如下: ...
- target属性值的含义
target属性值的含义: _blank:新建窗口 _self:相同窗口 _parent:父窗口 _top:首窗口 例子: window.open('url','_self'); <a href ...
- a标签的target属性
a标签的target属性 前端a标签最重要的属性是href属性,实现页面的跳转.但是在当前页面显示还是在新页面中显示需要使用target属性控制 前端a标签最重要的属性是href属性,实现页面的跳转. ...
- HTML超链接a标签的herf、target属性用法
HTML中a标签的herf.target属性的用法 在页面中超链接可以是一个字,一个词,或者一段话,也可以是一幅图像,可以点击这些内容来跳转到新的页面或者当前页面中的某个部分,在HTML中通常使用a标 ...
- .target 属性详解
target属性用于返回最初触发事件的DOM元素. 在HTML文档中,我们为 元素绑定点击事件("click"),由于DOM元素的事件冒泡机制,我们点击 元素内的一个元素就可以触发 ...
最新文章
- 工具用途_机械加工中研磨加工刀具(砂轮)﹑治工具及其用途
- Linux解决编译Apache出现的问题:configure: error: APR not found
- SpringSecurity 权限控制之异常处理流程图
- ThinkPHP简单的验证码实现
- 打破情感分类准确率 80 分天花板!更加充分的知识图谱结合范式
- Java描述设计模式(10):组合模式
- 拦截游戏窗口被移动_熊孩子骗家长人脸识别? 腾讯游戏出了个新招
- 天梯—奇偶分家(C语言)
- Yii框架官方指南系列42——专题:验证和授权(Authentication and Authori
- halcon 深度学习标注_halcon深度学习: 分类
- Android RecyclerView 子条目(item)嵌套 RecyclerView
- 智能网关服务器,边缘计算网关和智能网关区别?
- BUG记录:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is no
- hangfire oracle,.net core 之Hangfire任务调度
- 汉语拼音的5个声调该怎么学?
- python抠图原理_一键智能抠图-原理与实现
- ffmpeg获取rtsp h265_用FFmpeg将rtsp视频流保存成H264、h265文件
- SAP那些事-职业篇-36-从“固定资产清理”科目说开去
- 如何理解广义线性回归分析Logistic输出的OR值?
- 14 款好用的 iOS 开发工具