首先,JavaScript中没有“private static”这样的东西。你在这里使用的是一个简单的闭包,它由Immediately-Invoked Function Expression创建。
你的问题不太清楚,但我想你想计算创建的Car实例,并且它不起作用,因为当你实例化子类时计数器不会增加(问题1)。相反,当你定义你的子类(问题2)时,计数器只会增加一次。
由于JavaScript具有基于原型的继承模型,因此您必须创建一个可用作原型的对象。但我建议你在不调用父类的构造函数的情况下这样做(这将解决问题的第二部分)。这是在JavaScript世界各地使用的一种很常见的模式(见Simple JavaScript Inheritance,Backbone,CoffeScript等),这是非常简单的实现,如果你不需要支持很老的浏览器(IE6-8)。它是这样的:
SedanCar.prototype = Object.create(Car.prototype)
现在问题的第一部分很容易解决。每次孩子被实例化时,调用父构造函数。这也是一个相当不错的模式,并且它被构建到许多其他语言(Java等)中。在JavaScript中,你将不得不做手工,像这样:
var SedanCar = function() {
// Parent class initialization
Car.call(this /*, and, other, arguments, to, the, parent, constructor */)
// Child class initialization
};
这将调用与this
父构造绑定到新创建的对象。父构造函数进行初始化,然后孩子分配工作。在你的例子中,父母会像你期望的那样增加计数器。
什么是“在继承螺丝钉”呢?你想解决什么问题? – jfriend00
不,它是一个封闭。 – adrian