いつもどこかでデスマーチ♪

不定期に、私の日常を書き込みしていきます。

コメントに対するお返事

2013年08月16日 19時15分53秒 | Ext JS 系
元記事:http://blog.goo.ne.jp/pianyi/e/01ffe35b4d5f366bbd6cc9990dbcaa19

ご指摘内容を元にインラインで書いてみようと思います。
読みにくいと思ったら書き直すかも…

> > 2.引数が不要なのに、空白引数を指定しなければいけない。
> > Ext.Function.pass(this.onButtonClick, [''], this)
>
> 引数が不要なら Ext.Function.pass(this.onButtonClick) で動くように見えますけども。

ご指摘の通り、メソッド呼出はうまく行くでしょう。

ここで記載している"2.引数が不…"というのは「追加引数が前だと、引数を指定したくない場合(デフォルト動作)の処理が面倒です。」に対応する"対策の2番目"という意味になります。

どんな時に問題なのでしょう。
受けるメソッドを下記のように記載します。
function : onButtonClick(addArg, org1, org2, org3){}

私の書いた呼出しメソッドの場合…
Ext.Function.pass(this.onButtonClick, [''], this)
addArg = ''
org1 = ボタンオブジェクト(this)
org2 = イベント(e)
org3 = オプション(eOpts)
となります。

指摘されたメソッドの場合…
Ext.Function.pass(this.onButtonClick)
addArg = ボタンオブジェクト(this)
org1 = イベント(e)
org2 = オプション(eOpts)
org3 = ?(undefinedだった気がするが…)
になります。

引数はここを見て下さい:
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.button.Button-event-click


ではどんな時に問題が…?
org1引数がボタンオブジェクトかどうか分からなくなってしまうので、このメソッドを共通化する事が出来ません。

もちろん、似非オーバーロードのように引数有メソッドと、引数無メソッドを作ったり、私が書いた1や3の対応すれば問題無いでしょう。
ですが、本末転倒じゃね?というのが、元の記事で言いたかった事です。



> --
> 後ろに追加しない理由は、元々の引数が幅が変動するから、ではないでしょうか。
> 関数によっては、引数が書いてなくても、後ろに渡ってきている場合があります。
>
> 参照サイトの
> onButtonClick: function(name) {
> // nameに名前が入ってくる
> alert(name + ' Button');
> }
> なんかもそうですね。
> nameの後ろに、btnが渡っているとおもいます(多分

nameの後ろに引数は渡って来ています。
JavaScriptの"arguments"変数があります。
onButtonClick: function() {
// nameに名前が入ってくる
alert(arguments[0] + ' Button');
}
でも同じ動きをします。

今回の場合、URL先では下記の呼び出しが掛かれています。
click: Ext.Function.pass(this.onButtonClick, ['hoge'])

この場合下記のような引数になります。
arguments[0] = 'hoge'
arguments[1] = ボタンオブジェクト(this)
arguments[2] = イベント(e)
arguments[3] = オプション(eOpts)
arguments[4] = ?(undefinedだった気がするが…)

また、下記のように引数を宣言することにより、同じように引数が取得できます。
onButtonClick: function(name, btn, e, eOpts) {



> 仮に、後ろに追加した場合、元々の関数に渡ってくる確実な引数の数がわからないと、追加した引数を処理することが難しいとおもいます。
>
> なので、後ろに追加する不確定なものよりも、幅が作成者の手に委ねられる前の方が確実です。

APIドキュメントがあるので、引数が分からないっていうのはほとんど無いと思います。
また、Ext.Function.passを複数回使った場合、あとから使った方が前に来るので、多用しない方が良いと思うし…


ただ、確かにルール無用プロジェクトとか、フリーのプラグインでAPIドキュメントが無いとか、むやみに多用した場合は、引数の数が分からないかもしれませんね。
あとはブラウザが勝手に引数を増やした場合か…なるほどこれは有りうるのか…


ブラウザが引数追加したら動かなくなるから前追加かっ!
ありそうですね~おぉ~~~~~~

とりあえず、1つの案として(スゲー有力だけど…)書いて置きます~♪

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Ext.pass がどうしても使いづ... | トップ | FedoraとUbuntuのソフトウェ... »

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Ext JS 系」カテゴリの最新記事