今天无意间看到个词法new.target !
这是啥玩意儿 在我印象中 new 后跟的都是构造器!这是什么鬼~
let F = function F() { if(!new.target) throw new Error(‘....‘) // ··· };
查了下发现 其作用就是获取当前new的那个目标构造器
可以保证函数是被当作构造器来使用的 没有就是undefined
以前的话 你想确保函数是被new的 而不是通过直接调用的 也许就会这么干
let F = function F() { if(!(this instanceof A)) throw new Error(‘....‘); // ··· };
不过有点b格的人还是可以这么写
let f = F.apply(Object.create(F.prototype) ,[])
在es6中 class 已经帮你检查过了(是否是new的)
new.target就知道当前是哪个class 下面输出 F2
class F2 extends F{ constructor() { //‘F2‘ console.log(new.target.name); } }
挺冷门的 兼容还挺惨的 chrome 46 firefox 41
知道就行了
时间: 2024-10-21 21:57:41