我无法理解为什么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)
这一切都很好,但我很好奇......
答案 0 :(得分:0)
这是JS的一个瑕疵。有些函数在内部构造对象并使用new
new
返回它们(不需要new
)和“构造函数”。
通常的建议是永远不要编写自己的类型来要求new
,因为this
要求函数做坏但微妙的事情如果省略它(具体来说,它们将otool -L
绑定到全局对象而不是新对象,因此实例变量实际上是全局变量,并分配给实例成员clobbers全局变量。如果你必须使用它们,JavaScript:Good Parts建议在名称中使用初始大写字母表示“需要新的”和其他所有内容的初始小写字母。