Javascript中的封装和继承

时间:2014-03-06 22:13:02

标签: javascript oop inheritance encapsulation

在Javascript中,您可以通过对象原型获得继承,或者您可以通过闭包进行封装,该闭包将接口对象返回到您要公开的位。你有什么方法可以同时拥有它们吗?如果是这样,那么最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

以下是一个例子:

function Base(thing) {
    this.getThing = function() {
        return thing;
    };
}
Base.prototype.cappedThing = function() {
    return this.getThing().toUpperCase();
};

function Derived(thing) {
    Base.call(this, thing);
}
Derived.prototype = Object.create(Base.prototype);

var d = new Derived("foo");
console.log(d.cappedThing()); // "FOO", through inheritance and encapsulation

但如果问题是真的:JavaScript在各种基于类的语言中是否有类似“受保护”的东西(“子类”可用的方法,但直接实例化基类时却没有)答案是否定的,但事实并非如此。如果base和derived在一个共享的,但在其他方面是私有的,范围内定义,你可以得到结束,当ES6的Name objects是常见的时候更是如此,但是没有任何东西跨越完全独立的编译/范围单元。