2017-10-19 4 views
2

This article describe getters。それは「 スマート/自己上書き/怠惰なゲッター」のセクションを持っている そしてそれは私のため不明だ、デフォルトでは「メモ化」ゲッターであるか、私は自分自身javascriptとmemoizedゲッター

例えば、この機能を実装する必要があります

class Foo() { 
    get boo() { 
    this._boo = this._boo || new Boo(); 
    return this._boo; 
    } 
} 

または私は書くことができます:

class Foo() { 
    get boo() { 
    return new Boo(); 
    } 
} 

は同じ結果を持っていますか?

+1

*値を取得するたびに* getter *が呼び出されます。それでおしまい。彼らはあなたがそれを実装するまでmeoizationはありません –

+0

彼らはデフォルトではありません、あなたはそれを自分で行う必要があります。 – Rafael

+1

ゲッターはデフォルトでは怠惰だと言われていますが、自分で暗記を扱う必要があります(そのような実装方法の例があります)。 – Phylogenesis

答えて

2

いいえ、メモ帳に登録されたゲッターにはJavaScriptでの言語レベルのサポートはありません。 2番目の例では、booにアクセスするたびに新しいオブジェクトが作成されます。

0

は、このコードを検討:

class Person {} 
Person.SHORT = 0;//lvalue 

class Person { 
    static get SHORT() { return 0; }//rvalue 
} 

両方が同じ結果を返すが(それは関数呼び出しのオーバーヘッドを回避するため)、後者は、実際に高速です。 jsエンジンは、一方を他方に無効化する最適化を行うことができます。

0

その記事の中で最も興味深いのビットは、この技術を提供していますSmart/self-overwriting/lazy getters、だった:あなたはそれを求めるまで、このごFooオブジェクトで

class Foo { 
    get boo() { 
    delete this.boo; 
    return this.boo = new Boo(); 
    } 
} 

は自分booプロパティを作成する手間を経由しません。次に、それは一度作成され、それに対するさらなる要求は単に同じオブジェクトを返します。これは、new Boo()がリソースを多用して作成し、合理的にはしばしば必要ない場合に意味があります。

これを拡張すると、現在のバージョンを削除して次のアクセス時に再作成できるようになります。しかし、それはずっと多くのコードであり、おそらくかなり稀です。

関連する問題