2011-09-11 10 views
0

JavaScriptでプロトタイプの継承を使用しており、わからない問題が発生しました。多くのJS継承の例では、サブメンバーからスーパーメンバーにアクセスしていますが、スーパーメンバーからサブメンバーにアクセスする必要があります。javacript oopアクセス基底から 'class'メンバーを拡張する

パフォーマンステストマッピングWebサービスのツールを構築しています。私はWMSプロトコルの複数のバージョンをサポートしたいと思います。可能な限りWMS基本クラスにすべての共有機能/プロパティを保持し、必要に応じて特定のバージョン実装の詳細のみを提供したいと思います。私のWMS v1.1.1デベロッパー機能は次のようになります。次のように

function wms111() { 
    this.version = '1.1.1'; 
} 
wms111.prototype = new wms(); 

マイWMS機能(ショートバージョン)は次のとおりです。

function wms() { 

    var that = this; 

    this.HTTPMethod = 'GET'; 

    this.descriptionParameters = { 
     service: 'wms', 
     version: that.version, 
     request: 'getcapabilities' 
    }; 
} 

私はその後、

var service = new wms111(); 
var descriptionParameters = service.descriptionParameters; 

ような呼び出しでこれをテストします私はservicerequestプロパティが正しく定義されたdescriptionParametersオブジェクトを取得しますが、versionは未定義です。

誰でも私がwms111から正しいプロパティにアクセスする方法を理解できますか?

ご迷惑をおかけして申し訳ございません。

答えて

2

これは意図したとおりにそれを動作させる必要があります。

function wms111() {  
    this.descriptionParameters.version = '1.1.1'; 
} 

代わりのブランドの新しいプロパティを定義し、ちょうど子供に異なっている必要がありますプロパティを上書きします。

ここではアクションである:可能性は私に起こったことをhttp://jsfiddle.net/Wd9vE/1/

+0

優れたおかげで多くのことを。うまくいかないときに何が起こっているのか説明できますか?私は、新しいwms111()オブジェクトは、wms()関数とwms111()関数の両方ですべてを結合する単一のエンティティとして扱われると思ったので、 'that'を使用して(this)それらを区別しません – tomfumb

0

私は間違っているかもしれませんが、私はあなたができないと確信しています。継承はボト​​ムアップではなく、トップダウンで動作します。サブクラスで関数をオーバーロードすることはできますが、それは基本的にスーパークラスの関数をオーバーロードする必要がある抽象関数として扱います。

+0

が、その後JavaScriptで私は意味がないものを行うことができるように期待するようになってきました:) – tomfumb

関連する問題