2011-07-26 10 views
27

Objectのプロトタイプにある__defineGetter__()__defineSetter__()の機能は何ですか?__defineGetter __()関数と__defineSetter __()関数は何ですか?

+8

を[非推奨](HTTPS:/ /developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineGetter)それは「古い」と「現在使用されていない」という意味:-) – cwallenpoole

+1

? –

+0

@DOtNET忍者 - "古い、サポートされていない、使用すべきではありませんが、すでにそれらを使用している人との互換性を損なわないために残っています"。 – vcsjones

答えて

12

は、説明と例コードの​​を見る

ゲッターは、特定のプロパティの値を取得する方法です。セッターは、特定のプロパティの値を設定するメソッドです。ゲッターとセッターは、新しいプロパティの追加をサポートする事前定義されたコアオブジェクトまたはユーザー定義オブジェクトで定義できます。

ドキュメント(および@ cwallenpoole)に記載されているように、__define[GS]etter__()関数は非推奨です。 this articleにはさらに詳しい情報があります。私はdefineProperty()関数が今や好ましい構文だと信じています。

8

__defineGetter__()__defineSetter__()は、オブジェクトのプロパティのゲッターとセッターを作成する古い/元の方法です。それらは名前/値のペアとしてオブジェクトのプロパティを使用できますが、これらの名前/値のペアは機能によってサポートされています。

たとえば、固定範囲の乱数を参照したいとします。あなたは範囲の最大値を持つ単語としてこれらを表現することができ、それはプロパティのように見えます。

var random = {}; 
random.__defineGetter__('ten', function() { 
    return Math.floor(Math.random()*10); }); 
random.__defineGetter__('hundred', function() { 
    return Math.floor(Math.random()*100); }); 

上記の例では、この解決策を使用しないでください。代わりに、ES5以来、ゲッターとセッターの現代的な形を使用する必要があります。

var random = { 
    get ten() { return Math.floor(Math.random()*10); }, 
    get hundred() { return Math.floor(Math.random()*100); } 
}; 

上記コンストラクトのどちらかは、あなたがこのような乱数を取得できるようになる:

var myrand = random.ten; 
// returns a result in the range 0 to 9 
+0

ために非常に便利ですが、私は機能と同じことを行うことはできません、そしてゲッターとセッターの特定の使用は何ですか? –

+0

はいできます。私の例はゲッターとセッターの純粋な使い方を示しているだけなので、それほど素晴らしいものではありませんでした。通常、ゲッターとセッターは、可変および/またはより多くの計算機能によってバックアップされます。たとえば、Temperatureというオブジェクトがある場合、CまたはFの温度を返すプロパティCとFを持つことができます。これらは実際にプロパティではなく、オブジェクトに保持されている基本値を変換するメソッド(ゲッター)です。または、そのうちの1つは財産であり、もう1つはコンバージョンを行うゲッターです。 – Guy

関連する問題