2009-03-05 7 views
0

これはブラウザによってどのように直接行われるのか不思議です。私は、Javascript EnginesのArrayの.lengthプロパティは、実際には目に見えないセッターとゲッターを使って、ECMAの標準の機能を達成すると聞いています。「lengthプロパティが変更されるたびに、値が小さくない配列インデックス新しい長さが自動的に削除されます ")。私はこのケースでセッターが必要だと理解していますが、ゲッターは何ですか?この価値を得るためにネイティブゲッターを実際に呼び出す必要がありますか?または、これはJavascript Engineをどこか理解している間違いです。Javascript配列.lengthプロパティ/ JavascriptEngineのメソッド

答えて

3

プロパティは、フィールドとして、またはsetter/getterメソッドとして実装されるか...

var obj = {myProp:0}.myProp; // getting 
obj.myProp = 1; // setting 

上記の例は少しファンキーですが、私はあなたのアイデアを得ると思います。

フィールドの場合、それは単なる値です。値を設定すると、値が変化するよりも何も起こりません。

値が設定されるたびに何かを実行するためにsetterメソッドがある場合は、getterメソッドが値を返す以外に何もしない場合でも、一致させるgetterメソッドがあります。プロパティを実装する2つの方法を混在させたくない場合は、どちらの方向にも簡単に進むことができます。

2

defineGetter and defineSetterをご覧ください。これはFirefoxがそれをする方法かもしれませんが、他のブラウザについてはわかりません。

本当に問題はありますか? .lengthは私が知っているすべてのためにC++で実装することができます。それはjavascriptエンジンの組み込み部分であり、実際にはjavascriptでは実装できません。あなたが知る必要があるのは、配列の長さが長さを保持し、配列の長さが変更された場合です。

+0

ネイティブオブジェクトには、独自のゲッタ/セッタを持つことができます。 –

1

JavaScriptのArrayオブジェクトには、配列インスタンスの現在の長さを返す関数プロパティ.length()があります。 GettersとsetterはJavaScript 1.6(私は思う)のように定義することができますが、広く採用されておらず、私はそれをあまり利用していません。ゲッターと値を返す関数の唯一の違いは、構文です。ゲッターとセッターは、割り当ての方向に応じてエンジンから呼び出すことができます。

関連する問題