JavaScript和继承中的私有静态

前端之家收集整理的这篇文章主要介绍了JavaScript和继承中的私有静态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我理解私有静态机制如何在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创建.

你的问题不是很清楚,但我想你想要计算创建的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
};

这将调用父构造函数,并将其绑定到新创建的对象.父构造函数进行初始化,然后子进程完成工作.在您的示例中,父级将按预期增加计数器.

猜你在找的JavaScript相关文章