在另一个问题中,用户指出该new
关键字使用很危险,并提出了不使用该对象创建对象的解决方案new
。我不相信这是真的,主要是因为我使用了Prototype,Scriptaculous和其他出色的JavaScript库,并且每个人都使用了new
关键字。
尽管如此,昨天我还是在Douglas Crockford在YUI剧院观看了一次演讲,他说的一模一样,他new
不再在代码中使用关键字(JavaScript上的Crockford-Act III:终极功能-50:23分钟)。
使用new
关键字是否“不好” ?使用它的优缺点是什么?
我认为new是邪恶的,不是因为如果您忘记错误使用它可能会导致问题,而是因为它会破坏继承链,从而使该语言难以理解。
JavaScript是基于原型的面向对象。因此,每个对象都必须像这样从另一个对象创建
var newObj=Object.create(oldObj)
。这里oldObj称为原型的newObj(因此“基于原型”)。这意味着,如果没有找到一个属性newObj那么它将在搜索oldObj。 因此,默认情况下,newObj将是一个空对象,但是由于其原型链,它似乎具有oldObj的所有值。在如果你做的另一方面
var newObj=new oldObj()
,原型newObj是oldObj.prototype,这是不必要的难以理解。诀窍是使用
在此函数内部,仅在此处应使用new。之后,只需使用Object.create()方法。该方法解决了原型问题。