2012-04-02 31 views
3

これはJavaScriptのgetterとsetterがどのように機能するかに関する質問です。getter/setterを削除してgetter/setterを削除する

JavaScriptモジュールとしてのMozillaの実装(部分実装、Firefox Syncなどの意図された使用例に必要な重要な部分)には、以下のゲッター/セッター定義が含まれています。

ゲッター/セッターの「削除」とは何ですか?それは一体何の意味ですか?最初の使用を次の使用とは異なる結果にする効果があるようですが(もしそうなら、どのように)? MDN FROM

get repository() { 
    delete Log4Moz.repository; 
    Log4Moz.repository = new LoggerRepository(); 
    return Log4Moz.repository; 
}, 
set repository(value) { 
    delete Log4Moz.repository; 
    Log4Moz.repository = value; 
}, 

答えて

0

delete演算子は、オブジェクトのプロパティを削除します。オブジェクトがある場合

o = {a: "hello"、b: "world"};

、あなたは

o.aを削除します。

あなたのオブジェクトは、この

O = {B: "世界"}のようになります。

とその後のあなたは

o.a = "foo" を行う場合。

それはOオブジェクトし、値 "foo" を割り当てるには新しいプロパティaを追加すると、あなたのオブジェクトは、

O =のようになります{ "foo" という、B: "世界"} ;

+1

それが最初から始まったのであれば、それでも後でゲッター(またはセッター)になるのでしょうか?私はそうではないと思うだろう、今はちょうど価値があるだろうか? (プロパティがgetter/setterであるかどうかは、どうやって調べることができますか?ゲッター/セッターというオブジェクトを調べたりダンプする方法はありますか? –

2

質問(および既存の回答)には重要な部分がありません。 getterとsetterはLog4Mozオブジェクトで定義されています。それを念頭において、getterまたはsetterのいずれかが呼び出され、定義されているプロパティを削除するとどうなりますか?

deleteアクセサプロパティ(get/setを含むプロパティ)のプロパティは、データプロパティと同じ効果を持ちます。つまり、プロパティを削除します。 delete Log4Moz.repositoryの実行後、Log4Mozオブジェクトにrepositoryプロパティが存在しなくなり、getter/setter関数はそのプロパティにバインドされなくなりました。

Log4Moz.repositoryに割り当てる次の行は、期待どおりに動作します。指定された値を持つLog4Mozオブジェクトにデータプロパティが作成されます。

実際には、最初にアクセスした後(getまたはset)にアクセサプロパティをdataプロパティに置き換え、遅延初期化データプロパティを作成します。

+0

優れた答えです。 –

関連する問題