2016-10-18 13 views
0

私はjavascriptを知っています、私のむしろ基本的な質問をしてください。 以下のサンプルコードのように、クラス内のプロパティを使用するにはどうすればよいですか?javascriptクラス内からprototypeプロパティにアクセスする方法は?

MyClass.prototype.myFunction = function myFunction() { 
    const x = this.myProperty[Object.keys(this.myProperty)[0]] + 10; 
    // -------^^^^^-----------------------^^^^^ 
    return x; 
}; 

オブジェクトからプロパティを取得します:this.myPropertyを使用して

function MyClass() { 
    // nothing special 
} 

MyClass.prototype.myProperty = { 
    key1: 'some value 1', 
    key2: 'some value 2', 
}; 

My Class.prototype.myFunction = function myFunction() { 
    // I need to retrieve the first value of myProperty 
    const x = myProperty[Object.keys(myProperty)[0]] + 10; // won't work 
    return x; 
}; 

module.exports = MyClass; 

はエラーにCannot convert undefined or null to object

答えて

3

使用this.をスローします。オブジェクトに独自のプロパティのコピーがない場合は、オブジェクトのプロトタイプから取得します。

それとも、明示的にも、プロトタイプから毎回それを取得したい場合:

MyClass.prototype.myFunction = function myFunction() { 
    const p = MyClass.prototype.myProperty; 
    const x = p[Object.keys(p)[0]] + 10; 
    return x; 
}; 

サイドノート:constはES2015のように、新しいものです。

class MyClass { 
    constructor() { 
    // nothing special 
    } 
    myFunction() { 
    const x = this.myProperty[Object.keys(this.myProperty)[0]] + 10; 
    return x; 
    } 
} 
MyClass.prototype.myProperty = { 
    key1: 'some value 1', 
    key2: 'some value 2', 
}; 

module.exports = MyClass; 

注:ES2015を使用している(と後でV6を使用したりしている場合、あなたができることを意味し、NodeJSを使用しているように見える)場合は、より簡単にclass表記法を使用してクラスを作成することができますもしmyPropertyをプロトタイプに載せたいのであれば、依然として "clunky"な方法を割り当てる必要があります。しかし、代わりにコンストラクタでそのプロパティを作成することができます。


サイドノート2:あなたはmyPropertyを変更しない限り、後に、私は強く(混沌、読みにくいれ、未定義の動作をthis.myProperty.key1this.myProperty.key2を使用することをお勧めしてthis.myProperty[Object.keys(this.myProperty)[0]]を使用していない、Object.keysで返されるキーの順序ではありませんES2015でさえも指定されていない)、余分な作業。

+0

申し訳ありません私は何とか私の質問を更新して答えの例を無効にしました!しかし、 'this.myProperty'は' undefined'と思われます。私は決して '新しい'クラスを決して私は推測する??? – Yalda

+0

@ヤルダ:どのように使用しているかを示します。 –

+0

私は、問題が何であるかを知るために私は近いと思う。実際、私は同じプロパティを 'myFunction'と他のプロパティで使いました。代わりにエラーが後者から来ているようです。それはまったく異なる質問ですので、私はあなたの答えを現在の質問に受け入れます:) – Yalda

関連する問題