【问题标题】:Encapsulation and Inheritance in Javascript [duplicate]Javascript中的封装和继承[重复]
【发布时间】:2014-03-06 22:13:01
【问题描述】:

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

【问题讨论】:

  • 一个你想要什么以及你认为你不能得到什么的例子,将极大地改善/澄清这个问题。

标签: javascript oop inheritance encapsulation


【解决方案1】:

这是一个例子:

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 很常见,但没有跨越完全独立的编译/作用域单元时更是如此。

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2020-12-28
    • 2017-09-23
    • 1970-01-01
    相关资源
    最近更新 更多