我理解私有静态机制如何在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中没有“私有静态”这样的东西.你在这里使用的是一个简单的闭包,由Immediately-Invoked Function Expression创建.
原文链接:https://www.f2er.com/js/429691.html你的问题不是很清楚,但我想你想要计算创建的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
};
这将调用父构造函数,并将其绑定到新创建的对象.父构造函数进行初始化,然后子进程完成工作.在您的示例中,父级将按预期增加计数器.