js中为什么Symbol可以函数调用却不能当构造器?

TIS_OMiddle
  • 15

我知道可以Symbol(),不能new Symbol(),但这是怎么实现的呢?

或者说我能否写出这么一个函数:只能简单的函数调用,不能带new,一但加了new就报错

评论
阅读 473
3 个回答

内部怎么实现的不好说。用纯js也可以实现:

function Foo() {
    if (this !== window) { // 如果是node就把window换成global
        throw new Error("new is not permitted.");
    }
    ...
}
new Foo(); // 报错
function Foo() {
    if (this instanceof Foo) {        
       throw new Error("new is not permitted.");
    }
}
new Foo();

箭头函数就是啊

宣传栏