对于javascript API功能,javascript新关键字是否可选?

时间:2015-10-06 20:13:16

标签: javascript object constructor

我无法理解为什么new关键字兼容javascript API对象/界面功能。

d = new String(); // javascript native object
d2 = String();
console.log(d);
console.log(d2);

导致控制台(看起来很正常):

 String {}
 (an empty string)

但:

b = new Blob(); // API object
b2 = Blob();
console.log(b);
console.log(b2);

结果:

Blob { size=0, constructor=function(), type="", more...}
Blob { size=0, constructor=function(), type="", more...}

而不是:

Blob { size=0, constructor=function(), type="", more...}
Blob() is undefined or (an empty blob)

这一切都很好,但我很好奇......

1 个答案:

答案 0 :(得分:0)

这是JS的一个瑕疵。有些函数在内部构造对象并使用new new返回它们(不需要new)和“构造函数”。

通常的建议是永远不要编写自己的类型来要求new,因为this要求函数做坏但微妙的事情如果省略它(具体来说,它们将otool -L绑定到全局对象而不是新对象,因此实例变量实际上是全局变量,并分配给实例成员clobbers全局变量。如果你必须使用它们,JavaScript:Good Parts建议在名称中使用初始大写字母表示“需要新的”和其他所有内容的初始小写字母。