我了解私有(private)静态机制在 javascript 中的工作原理;但是那拧紧了 遗产。 例如:
var Car = (function() {
var priv_static_count = 0;
return function() {
priv_static_count = priv_static_count + 1;
}
})();
var SedanCar = function () {};
SedanCar.prototype = new Car();
SedanCar.prototype.constructor = SedanCar;
有什么办法可以避免这个陷阱吗?
最佳答案
首先,JavaScript 中没有“私有(private)静态”这样的东西。您在这里使用的是一个简单的闭包,它由 Immediately-Invoked Function Expression 创建。 .
你的问题不是很清楚,但我想你想计算创建的 Car 实例,但它不起作用,因为当你实例化子类时,计数器不会递增(问题 1)。相反,当您定义子类时,计数器只会增加一次(问题 2)。
由于 JavaScript 具有基于原型(prototype)的继承模型,因此您必须创建一个可用作原型(prototype)的对象。但我建议你不要调用父类的构造函数(这将解决问题的第二部分)。这是 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
};
这将使用绑定(bind)到新创建的对象的 this
调用父构造函数。父构造函数进行初始化,然后子构造函数完成它的工作。在您的示例中,父级将按照您的预期递增计数器。
关于javascript - JavaScript 中的私有(private)静态和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14475164/