2014-03-06 69 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很常見,但沒有跨越完全獨立的編譯/範圍單元時,您可以關閉。