2014-03-06 32 views
1

在Javascript中,您可以通过对象原型获得继承,也可以通过封闭将封装返回到要公开的位。有什么办法可以同时使用两种方法吗?如果是这样,那将会是一个好方法呢?Javascript中的封装和继承

+1

一个你想要的东西和你认为你不能得到的东西的例子会大大改善/澄清这个问题。 –

回答

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的有像“保护”在各种基于类的语言(可为“子类”的方法,但不能直接当你什么实例化基类),那么答案是否定的,不是。如果基础和派生是在共享的但私有的范围中定义的,甚至当ES6的Name objects很常见,但没有跨越完全独立的编译/范围单元时,您可以关闭。