■吉里吉里/KAG/TJS雑談質問スレ■その29
■ このスレッドは過去ログ倉庫に格納されています
0886名前は開発中のものです。
2016/03/31(木) 16:34:13.25ID:1iv6e1otまずはtjsにおけるコンテキストとはなんぞやを理解しましょう
tjsでのコンテキストは、実行するときに変数を参照する先のこと。今使ってる実行コンテキスト(this)に目的の変数がなければglobalを参照してそこにもなければエラーになる仕組みです
tjsの関数はよばれた時につかうコンテキストを持てます。コンテキストを持ってればそのコンテキストをthisとして動作して、関数から戻る時に前のコンテキストに戻します。なければ現在のままで動きます
globalに名前つきで作られた関数はglobalコンテキストを持ってます。インスタンスのメンバ関数はそのインスタンス自身をコンテキストとして持ってつくられます
obj.func() で呼び出される関数は、何もいじってなければobjをコンテキストとして持ってるので、objのメンバを参照して動作できるわけです
「いじってなければ」がポイントで、incontextof はそのコンテキストを入れ替えた関数を作る演算子です
function() と無名で作られた関数はコンテキストを持たないので、オブジェクトにあとから関数を足す場合などでは明示的にそのオブジェクトをコンテキストとして足す必要があり、そのためにKagのMainwindowで多用されてます
任意の関数のコンテキストを変えて使うことはできますが、関係ないものを使っても混乱するだけなので濫用はつつしむべき機能ではあります
辞書でincontextを使う理由は、辞書は入れる値と名前が重なると困るので、tjsでは辞書のインスタンスにはメンバ関数が作られてません。関数自体はDictionaryクラスにあるのでそれにincontextof でインスタンスをくっつけて使うわけです
■ このスレッドは過去ログ倉庫に格納されています