2017-12-05 28 views
0

いくつかのプロパティを持つES6クラスを作成しました。このように:ES6のjavascriptクラスのジェネリックメソッド内のすべてのゲッターセッターのリストまたは配列をフェッチする方法は?

class CustomLocalStorage { 
//#region userName 
get userName() { 
    this._userName = localStorage.getItem("25ciWC16Hh"); 
    this._userName = this._userName ? decryptText(this._userName) : ""; 
    return this._userName; 
} 

set userName(newValue) { 
    if(newValue) { 
     this._userName = encryptText(newValue + ""); 
     localStorage.setItem("25ciWC16Hh", this._userName); 
    } 

} 
remove_userName() { 
    this._userName = null; 
    localStorage.removeItem("25ciWC16Hh"); 
} 
//#endregion userName 

//#region webapi 
get webapi() { 
    this._webapi = localStorage.getItem("ALOrVJuVKt"); 
    this._webapi = this._webapi; 
    return this._webapi; 
} 

set webapi(newValue) { 
    this._webapi = newValue; 
    localStorage.setItem("ALOrVJuVKt", this._webapi) 
} 
remove_webapi() { 
    this._webapi = null; 
    localStorage.removeItem("ALOrVJuVKt"); 
} 
//#endregion webapi 

上記のコードに見られるように、各プロパティはlocalStorageオブジェクトに結合されています。今、getter/setterのすべてのプロパティを取得してlocalStorageから削除する汎用メソッドが必要です。

removeAll() { 
    for (var key in this) { 
     if(key != "_settings" && key != "") { 
      this[key] = null; 
      localStorage.remove(key); 
     } 
    } 
} 

をしかし、それはどのゲッター/セッターのプロパティを取得されていません。

だから、そのために私はクラス内で、次の方法を書きました。誰かが私が間違っている場所を教えてくれますか?

+0

localStorageキーはハッシュされていないので、インスタンスプロパティの名前は役に立ちませんか? – Bergi

+0

アンダースコアのプレフィックス付きのプロパティを使用している理由がわかりません。何もキャッシュしていません。ローカル変数はより効果的ではないでしょうか? – Bergi

答えて

1

問題はgetters/setters are not enumerableです(基本的にはclassで定義されています)。あなたはまだiterate them through Object.getOwnPropertyNamesことができます。あなたの場合:

removeAll() { 
    for (const name of Object.getOwnPropertyNames(CustomLocalStorage.prototype)) 
     if (name.startsWith("remove_")) // not "removeAll"! 
      this[name](); 
} 
+0

コードについてのご意見ありがとうございます。ご協力いただきありがとうございます –

関連する問題