JavaScriptにおける継承(のシミュレーション)と、属性のカプセル化

JavaScript初心者のお勉強中。
色々あさった結果、以下のページで紹介されていたNode.jsのinherits関数を使用するパターンが良さそうという結論に落ちつつあります。この場合に属性のカプセル化ってどうやるんだろうと思い、ファクトリーメソッドパターンを持ちだしてみたものの、超イマイチ…。
http://qiita.com/LightSpeedC/items/d307d809ecf2710bd957


//ファクトリーオブジェクト。
var KlassFactory = function(){
// ベースクラス
var Klass = function(attr){
this.attr = attr;
}
Klass.prototype.getAttr = function(){
return this.attr;
}

// サブクラス
var Sub = function(attr,subattr){
Klass(this,attr);
this.subattr = subattr;
}

    //継承処理。簡易ロジックとして実装。実際は、Node.jsのinheritを実行する。
Sub.prototype = Object.create(Klass.prototype, {
constructor : {
value : Sub,
enumerable : false,
writable : true,
configurable : true
}
});

//ファクトリーオブジェクトを返却。
//ここでクロージャを使うことで、ベースクラス・サブクラス自体を隠蔽する。
return {
createKlass : function(attr){
//属性値はファクトリーメソッド内でクロージャとして生成する。
var klass = new Klass(attr);
//属性値を参照するためには、klassにバインドする必要がある。
//(createKlassの戻り値のオブジェクトには、attrを定義していないため。)
return {getAttr : klass.getAttr.bind(klass)};
},createSub : function(attr,subattr){
var sub = new Sub(attr,subattr);
return {getAttr : sub.getAttr.bind(sub)};
}
}
}();

そもそもコンストラクタ関数が外部に公開されないので、instanceofなどが使えないし、新たにサブクラスを定義する場合、KlassFactoryに手を入れたりする必要があるしで、超イマイチ。素直に、情報隠蔽は諦めたほうがいいのかな。