new 是组织函数天生实例的下令, ES6为 new 下令引入了 new.target属性。这个属性用于确定组织函数是怎么挪用的。在组织函数中, 若是一个组织函数不是通过 new操作符挪用的, new.target会返回 undefined。
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.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() // 不报错
肥胖,是现如今大多数人的状态,饮食充足、工作也不需要体力劳动导致每天身体热量盈余,脂肪随之囤积在体内。 肥胖会为身体带来很多不好的影响,例如:高血压、高血糖、高血脂,配方人群的发病率比正常人要高很多...
自从支付宝免费提现额度终身限制为2万后,很多朋友在转账及提现时多多少少都会有些顾虑,我的免费额度还有多少?这次提现要收多少手续费?给别人转账别人怎么免费提现?诸如此类的问题都飞奔过来,接下来羊毛那些事...
技术黑客群信息安全web安全渗透运维黑客工具找黑客黑客联系方式24小时在线网络黑客黑客业务黑客联盟黑客培训黑客教程黑客新闻。 这个黑客组织放出了目前为止看起来危害性最严重的消息一批非常机密可以黑进多种...
先前,中国最大的护肤产品零售连锁企业法国娇兰嘉仁在進口区开设了试点店,开门店当日市场销售业绩增长二十万。 为什么能卖这么多?品管峻感觉一个很重要的原因是法国娇兰佳仁的進口区有三个独家经营知名品牌。想...
心脏病遗传是否因人有所不同的,因发病原因不一样分成二种:先天心脏疾病和后天心脏疾病。心脏病遗传是否有很多的牵制要素,最先心脏疾病种类便是更为重要的要素。 心脏疾病会基因遗传吗?许多研究表明,先...
敷面膜让自己的皮肤变好之后,很多人仿佛是着了迷一样,对面膜简直是爱不释手,每一天都敷面膜,这样对自己的皮肤真的好吗?下面友谊长存小编带来:面膜需要每一天都敷吗 一天敷一次面膜好吗。 面膜需要每一天...