在Javascript中,您可以通过对象原型获得继承,或者您可以通过闭包进行封装,该闭包将接口对象返回到您要公开的位。你有什么方法可以同时拥有它们吗?如果是这样,那么最好的方法是什么?
答案 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是常见的时候更是如此,但是没有任何东西跨越完全独立的编译/范围单元。