- + JavaScript の質問用スレッド vol.117 +
308 :デフォルトの名無しさん[sage]:2014/12/02(火) 13:27:53.03 ID:OQmm7jB2 - jQueryにはbindに相当するものとして、$.proxyっていうのが有るのだけれど、
なんでbindがproxyという名前なのか昔から疑問だった。 prototypejsではbindという名前なのに。 最近その謎が解けた。それは変数にthisを代入すればいいから bindは不要であるという話にもつながっていて、 例えば、>>293みたいなものは、bindで渡すべきじゃない。 なぜなら、getXは普通に考えると自分自身のxを返すという仕様であり、 外部から指定されるべきものじゃないから。 そして外部から指定するもの。例えばあるクラスにイベントハンドラを 設定するみたいなコード。そのイベントハンドラに匿名関数を渡すのではなく、 別のオブジェクトの関数を渡す時に、$.proxyを使ってオブジェクトをバインドする。 (普通は関数だけじゃなくてオブジェクトも指定する必要があるから) バインドしたい時というのは、このように別のオブジェクトの関数への プロキシとして使うことがほとんどだから$.proxyという名前なんだ。
|
- + JavaScript の質問用スレッド vol.117 +
309 :デフォルトの名無しさん[sage]:2014/12/02(火) 13:34:01.31 ID:OQmm7jB2 - 少し言い換えると、
「bindがthisを結びつけた新しい関数を生成」までが仕事の範囲なのに対して 「proxyはthisを結びつけた関数に処理を移譲」までが仕事の範囲というニュアンス
|
- + JavaScript の質問用スレッド vol.117 +
315 :デフォルトの名無しさん[sage]:2014/12/02(火) 19:46:36.36 ID:OQmm7jB2 - そういや、昔のブラウザ(IE5あたり?)はcallもapplyもなかったんだよな。
その時代にクロスブラウザやってたから、callとapply相当を 独自実装したことがあるよ。 どうやって実装したか、考えてみると面白いかもしれないね。
|
- 動的言語で大規模開発
661 :デフォルトの名無しさん[sage]:2014/12/02(火) 19:47:59.90 ID:OQmm7jB2 - >>659
凄いけど役に立たないなw
|
- 動的言語で大規模開発
662 :デフォルトの名無しさん[sage]:2014/12/02(火) 19:49:38.18 ID:OQmm7jB2 - なんで役に立たないかというと
実行中のメソッドコンテクストのスタックをトレースして任意の時点まで遡り、 その時の内部状態を観察してソースコードを修正、コンパイルした後、 そのままリジュームして処理を継続したらバグで変な状態になった。 また止めて変な状態を直して、正しい所に移動させて続けることも可能だけど 最初からやり直したほうが早い。
|
- 動的言語で大規模開発
664 :デフォルトの名無しさん[sage]:2014/12/02(火) 22:38:50.95 ID:OQmm7jB2 - 人間はミスするとう前提の話をしてるんだが?
スキルや能力とは関係ない。 ミスしないようなすごい人しか使えない道具ではなく、 ミスしてもすぐにリカバリできる仕組みを作るほうが重要。 ということで静的型付け言語はそうなってるって話なんだよ。
|
- 動的言語で大規模開発
666 :デフォルトの名無しさん[sage]:2014/12/02(火) 22:52:44.71 ID:OQmm7jB2 - 一体何の機能が制限されているというのか?
タイプ数が少し増えるというのならわかる。 制限されているという機能の名前を聞いたことがないし、 どうでも良い機能のために、動的型付け言語を使うという話しか聞かない 静的型付け言語で出来ないことはないし、(たとえば、C言語は静的型付け言語) 多くのことが動的型付け言語よりも便利に行える。 デメリットはほんの少しタイプ量が増えるだけ
|