【发布时间】:2014-03-06 22:13:01
【问题描述】:
在 Javascript 中,您可以通过对象原型获得继承,也可以通过闭包进行封装,该闭包将接口对象返回给您想要公开的位。有什么办法可以同时拥有吗?如果是这样,有什么好的方法吗?
【问题讨论】:
-
一个你想要什么以及你认为你不能得到什么的例子,将极大地改善/澄清这个问题。
标签: javascript oop inheritance encapsulation
在 Javascript 中,您可以通过对象原型获得继承,也可以通过闭包进行封装,该闭包将接口对象返回给您想要公开的位。有什么办法可以同时拥有吗?如果是这样,有什么好的方法吗?
【问题讨论】:
标签: javascript oop inheritance encapsulation
这是一个例子:
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 在各种基于类的语言中是否有类似“受保护”的东西(“子类”可用的方法,但在直接实例化基类时没有),那么答案是否定的,它没有。如果基类和派生类定义在一个共享但私有的作用域中,则可以接近,当 ES6 的 Name objects 很常见,但没有跨越完全独立的编译/作用域单元时更是如此。
【讨论】: