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() // 不报错
《三生三世枕上书》总算传出了上映信息,1月22日开播,《枕上书》是《十里桃花》的姐妹篇,叙述了三世三世的姻缘,是以帝君和凤九为主人公,那麼,三生三世枕奏疏是哪三世?三生三世枕奏疏是三生三世十里桃花运的...
努力做宣传!多参与淘宝官方活动,很快就拥有大量客户呀! 没有这个功能,只有下载订单,上面有客户资料 这需要专业的数据统计软件,卖家服务里有卖这类软件的!不过你是淘宝卖家吗? 客户资源是经过自己努力而赢...
在网络上常常能见到许多的梗。散装英语是近期出現的一个梗。日常生活我们在闲聊时也要说散装英语。那麼散装英语是什么梗 散装英语梗的出處是啥。领着下有关详细介绍。 散装英语是什么梗 中英参杂,...
窃取他人微信聊天记录的手机软件(远程控制查询目标微信聊天手机软件) 安再贤想公布微信聊天记录,却被胡惠山的光的速度扇了一巴掌:我压根无需这一手机软件 文/一封情书 安再贤和胡惠山的离异仍在再次发...
《The Search》是一款由Jason Godbey制作的冒险解谜游戏,发行于17年4月,Steam商店售价18米,游戏不支持简体中文,感兴趣的朋友可以领取一下! 获取方式:在Stea...
娃娃菜怎么做好吃,娃娃菜的家常做法。 蒜蓉粉丝娃娃菜 简单方便很适合上班族,虽然是蒸菜但是味道一点也不寡淡,非常下饭,美味又致简。 蒜蓉粉丝娃娃菜...