2017-08-21 6 views
2

私の "Foo"クラスのプロパティにアクセスしようとしています。 thisコンテキストが、私はmynameにアクセスするための推奨方法を探していますTestClass.getJavaScriptクラスのアクセスの親プロパティ

んではありませんので、TestClass.get.namemynameプロパティが存在しないことを

class Foo { 
    constructor(myname) { 
    this.myname = myname; 
    } 
} 

Foo.prototype.get = { 
    name() { 
    return this.myname; 
    } 
}; 

const TestClass = new Foo('Steven'); 
TestClass.get.name(); // undefined 

そのクリア:私のコードは次のようになります。 Smthのような:Parent.myname。

+0

これは、あなたの 'this'がインスタンスではなく' get'を指しているからです。また、オブジェクトがプロトタイプ – Rajesh

+0

にあるという悪い考え方 'get'をオブジェクトにしたい場合は、コンストラクタで' this.get = {...} 'を実行できます。 *親*コンテキスト内の変数にアクセスする固有の方法はありません。 –

+0

getプロパティを使用して実際にアクセスしたい場合、プロトタイプはすべてのインスタンス用であるため、getをプロトタイプに追加することはできません。しかし、あなたはオブジェクトにgetを追加することができます、そして、このgetはクラスでもあります。 – Keith

答えて

1

.name()を呼び出すコンテキストでは、という{ name: function() {...} }というオブジェクトがあります。しかし、あなたはコンテキストとしてTestClassでこのメソッドを呼び出す必要があります:

TestClass.get.name.call(TestClass) 
1

あなたはES6クラスを使用している場合、私はこのようなあなたのアクセサを書いてお勧めします。

class yourClass { 
    constructor(myname) { 
     this.myname = myname; 
    } 

    get name() { 
     return this.myname; 
    } 
} 

そのクラスを使用したコード例:

var foo = new yourClass("Harold") 
console.log(foo.name) 

基本的に機能を実行している場合でも、フィールドのようにアクセスできます。

+0

あなたの考えに感謝します。私の例題のショーはシンプルなものですが、私の場合のほとんどは構造がこれと似ていません。 APIのSDKによく似ています。例:SDK.SDK_TOPIC.SDK_ACTION();しかし、SDK_ACTIONの呼び出しは、作成されたクラスのオブジェクトからプロパティにアクセスする必要があります。 – TJR

+0

私は実際には、問題は表示されません。正直なところ、あなたのコードを理解して理解する必要があると思います。 – Seblor

+0

彼はダブルドット表記のために 'get'と呼ばれるプロパティを使ってアクセスしたいと思います。より深い例では 'shape.color.background = 123'などとなります。これらのクラス構造を作成することは可能ですが、それは簡単ではありません。 – Keith

関連する問題