通过new运算符将创建一个继承于其运算数的原型的新对象,然后调用该运算数,把新创建的对象绑定给this。这给了运算数(它应该是一个构造器函数)一个机会,在返回给请求者前去自定义新创建的对象。
如果忘记使用new运算符,得到的就是一个普通的函数调用,并且this被绑定到全局对象,而不是新创建的对象。这意味着当函数尝试去初始化新成员时,它将会“污染”全局变量,这是一件非常糟糕的事情,既没有编译时警告,也没有运行时警告。
按照惯例,结合new运算符使用的函数应该被命名为首字母大写的形式,并且首字母大写的形式应该只用来命名那些构造器函数。这个约定提供了一个视觉线索,以帮助发现那些JavaScript语言自身经常忽略却需要付出昂贵代价的错误。一个更好的应对策略就是根本不使用new运算符。