Mix-in APIの追加(h5.mixin空間) #300

Closed
simdy opened this Issue Apr 30, 2014 · 4 comments

Comments

Projects
None yet
2 participants
@simdy
Member

simdy commented Apr 30, 2014

Mix-inを行うAPIを追加する。h5.u.objにmix()関数を追加する。

mix関数はtarget, mixinの2つの引数をとる。

target

mixを行うオブジェクト。

mixin

特定の機能セットを持ち、ターゲットに提供するミックスイン。
この引数には、特定の処理を実行する、function mixin(target)というシグネチャの関数を渡すことを想定する。
この関数に渡すtargetは、mixを行うオブジェクト(つまり第1引数)である。

この関数は、渡されたtargetに対して必要な関数プロパティを追加する責任を持つ。

@simdy simdy added this to the v1.1.10 milestone Apr 30, 2014

@simdy simdy added the enhancement label Apr 30, 2014

@simdy simdy changed the title from Mix-in APIの追加:h5.u.obj.mix(target, mixin) to Mix-in APIの追加(h5.mixin空間) Apr 30, 2014

@simdy

This comment has been minimized.

Show comment
Hide comment
@simdy

simdy Apr 30, 2014

Member

API設計を変更します。

h5.u.obj.mix()関数は作成せず、h5.mixin.createMixin(moduleObject)関数を作成します。
createMixin(moduleObject)は、mix(target)とhasInterface(object)を持つMixinオブジェクトを生成します。
当該Mixinオブジェクトのmix()を呼ぶと、moduleObjectで指定されたプロパティをtargetに付加します。

また、hasInterface()は、引数で渡されたobjectがmoduleObjectで指定された全てのプロパティを持つかどうかを判定します。
hasInterface()では、そのオブジェクトの固有プロパティ(hasOwnProperty()がtrue)かどうかはチェックしません。したがって、プロトタイプチェーン上に(全ての)指定されたプロパティがあればtrueを返します。

今回のバージョンでは、moduleObjectが持つことができるのは、関数、数値リテラル、文字列リテラル、ブール値リテラル、nullのみとします。値がundefinedとなっているプロパティは、存在しても無視することとします。

例)EventDispatcherの場合:

var obj = {};
h5.mixin.eventDispatcher.mix(obj);  //EventDispatcherのインターフェースがobjに付加される
Member

simdy commented Apr 30, 2014

API設計を変更します。

h5.u.obj.mix()関数は作成せず、h5.mixin.createMixin(moduleObject)関数を作成します。
createMixin(moduleObject)は、mix(target)とhasInterface(object)を持つMixinオブジェクトを生成します。
当該Mixinオブジェクトのmix()を呼ぶと、moduleObjectで指定されたプロパティをtargetに付加します。

また、hasInterface()は、引数で渡されたobjectがmoduleObjectで指定された全てのプロパティを持つかどうかを判定します。
hasInterface()では、そのオブジェクトの固有プロパティ(hasOwnProperty()がtrue)かどうかはチェックしません。したがって、プロトタイプチェーン上に(全ての)指定されたプロパティがあればtrueを返します。

今回のバージョンでは、moduleObjectが持つことができるのは、関数、数値リテラル、文字列リテラル、ブール値リテラル、nullのみとします。値がundefinedとなっているプロパティは、存在しても無視することとします。

例)EventDispatcherの場合:

var obj = {};
h5.mixin.eventDispatcher.mix(obj);  //EventDispatcherのインターフェースがobjに付加される

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 1, 2014

fukudayasuo
#300 h5.mixinを作成しました。
h5.mixinのテストケース作成しました。

#268 h5.mixin.eventDispatcherを作成しました。
EventDispatcherをh5internalに公開してh5.mixin.jsで使用しています。
h5.mixin.eventDispatcherのテストは未追加です。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo
#300 ビルドにh5.mixin.jsを含めるようにしました。
mixinはmixinモジュールを作るのではなくutilモジュールに含めてビルドされるようにしました。
@simdy

This comment has been minimized.

Show comment
Hide comment
@simdy

simdy May 2, 2014

Member

@fukudayasuo
mixinのエラーコードを
http://www.htmlhifive.com/conts/web/view/reference/error-code
に追記してください。

Member

simdy commented May 2, 2014

@fukudayasuo
mixinのエラーコードを
http://www.htmlhifive.com/conts/web/view/reference/error-code
に追記してください。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo
#300 h5.mixin.eventDispatcher.mix()のテストコードを修正しました。
createItemしたitemが持つEventDispatcherのメソッドと比較して判定するのではなく、EventDispatcherのメソッドを持っているかどうかを判定するようにしました。
@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo May 2, 2014

mixinのエラーコードをhifiveのページに追記しました。
http://www.htmlhifive.com/conts/web/view/reference/error-code

mixinのエラーコードをhifiveのページに追記しました。
http://www.htmlhifive.com/conts/web/view/reference/error-code

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo
#300 hasInstance→hasInterfaceに修正。
hasInstanceは間違いです。インターフェースを持つかどうかの判定のため、hasInterfaceが正しいです。

変数名の変更
eventDispatcherPrototype→eventDispatcherModule

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

@simdy simdy closed this May 2, 2014

@fukudayasuo

This comment has been minimized.

Show comment
Hide comment
@fukudayasuo

fukudayasuo Jun 5, 2014

テストケースのアサーションで、actual(実行結果)とexpect(予想)が逆になっていた箇所があるので修正します

テストケースのアサーションで、actual(実行結果)とexpect(予想)が逆になっていた箇所があるので修正します

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment