Ext.Function.flexSetter について

ども、小堤です。

そういえば、中途半端なまとめになってたなぁと思って。
flexSetterの話です。

前に1度触れましたが、そのときは、Ext.define経由でしたので。
flexSetter単体で、その機能をみていきたいと思います。

サンプルにも書かれてるとおり・・・

まぁ、単純な、無名関数を用意して、その引数に、名前、値が渡されてきて、それをthisのキーとして値を設定する関数オブジェクトを作成します。

flexSetterの引数に、この無名関数を渡すと、別の関数オブジェクトが渡されてきます。
そして、ここで定義しているsetValueは完成します。

では、このsetValueには、関数オブジェクトが格納されていますが
どういった挙動をするのでしょうか。

上記のコードを、そのまま、Ext.onReadyの中で実行すると、グローバルスコープに対してname1が作成され、その値がvalue1になります。

次のように、オブジェクトを指定して、まとめて値を設定することも可能になります。
前にも記載しましたが、これは、Ext.defineによるコンフィグ(プロパティ)の設定などに利用されています。

では、Ext.onReadyでは、グローバルスコープになってしまうので、任意のスコープで実行させます。

flexSetterを呼び出した時の、スコープは、oオブジェクトです。
従って、無名関数内のthis[name]… の部分のthisはoオブジェクトになります。

このように、flexSetterを実行したスコープのオブジェクトに対して、プロパティを柔軟に設定できる機能です。
だからflexSetterっていうのかな?たぶん。

Ext.defineで使われているだけでなく、Ext Coreに含まれますので、Ext JS だけじゃなく
今後Sencha TouchでもExt Coreでも利用する機会があるかも知れませんね。
特にライブラリ的なものや、共通化のものを作る人は。

ではでは。

Ext.Function.flexSetter について