のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,934人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレ+ JavaScript の質問用スレッド vol.128 +

    JavaScript覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    802 = :

    >>796
    "全てのfunction" には thisという引数がある。と言った通り補完してみればわかるだろう。
    呼び出し元側は脳内で補完してくれ。ドットの前がthis、ただしcallとapplyを使えばそれをすげ替えられる。

    function appendFunction (this, fn1, fn2) {
     return function (this) {
      fn1.call(this);
      fn2.call(this);
     };
    }

    var a = 0;
    var obj = {
      a: 10,
      hoge: function(this){
        this.a++;
      }
    }

    obj.hoge();
    console.log(obj.a);
    console.log(a);
    obj.hoge = appendFunction( obj.hoge, function (this) { console.log(1); });
    obj.hoge();
    console.log(obj.a);
    console.log(a);

    804 = :

    >>802
    お前の説明じゃどのタイミングで無名関数のthisがどう解決されるのかわからんぞ

    805 = :

    >>797の言う通りだよ。
    元々が特殊な条件の質問。
    それに対する作者の想定がおかしい。
    そして想定に対してのコードもおかしい。

    何もかもおかしく歯車の噛み合っていない物に、
    頑張って意味づけして理解する意義がどこにある?

    806 = :

    >>797
    えとね。thisを知らない人は "束縛" って言う言葉も知らないの。
    俺は知らない人への考え方の説明をしている。
    だから束縛という言葉はあえて使ってないんだよ。

    807 = :

    警告!警告!
    appendFunctionに関する質問は
    ライブラリ関係の話題を禁止とする条例に接触する恐れがあります
    直ちに停止して下さい

    808 = :

    最低でもappendFunctionを展開して説明すべきじゃ?
    それでも意味あるかわからんけど……

    809 = :

    >>804
    > お前の説明じゃどのタイミングで無名関数のthisがどう解決されるのかわからんぞ

    無名関数って、obj.hogeにappendFunctionで入れたやつか?
    その無名関数をobj.hoge()で呼び出してるんだから
    無名関数の中身は、obj.hogeのドットの左側、objに決まってるだろう?

    810 = :

    appendFunctionのクソコードでの説明いい加減やめろ
    thisが呼び出し時に決定されるっていう一番重要な部分省いて自己満足な説明しすぎだ

    811 = :

    批判だけして可能性をつぶす書き込みをする人は何だかなあ

    812 = :

    >>810
    ほんこれ

    813 = :

    決まってるって
    これ完全に相手への理解より解説が目的になっとりますわ

    814 = :

    コードを批判する暇があったら更にエレガントなコードで魅せてくれ

    815 = :

    >>813
    俺は(callやapplyで指定しない限り)ドットの左側のオブジェクトがthisになると言ってるわけで、
    俺が言っていることを適用すると、そうなるだろ?
    だから俺の説明に当てはめると、そう決まってるって言ってるんだが。

    816 = :

    >>815
    newがあるのでまずその説明の時点で間違ってるわな

    817 = :

    newが一番混乱してるだろう部分なのに
    呼び出し時に決まるという部分を省いてドットの左とか言ってちゃ駄目だわな

    818 = :

    そもそも無名関数って言うけど名前は付いてるよね。
    http://www.2ality.com/2015/09/function-names-es6.html#methods-in-object-literals

    http://www.ecma-international.org/ecma-262/6.0/#sec-object-initializer-runtime-semantics-propertydefinitionevaluation
    PropertyDefinition : PropertyName : AssignmentExpression の 6

    819 = :

    違う違う
    無名関数がわからないって言ってる人は本来の意味の無名関数じゃなくて
    オブジェクトが付かない関数呼び出しを言ってる

    821 = :

    知らない
    理解したくもないウンコード

    822 = :

    ポッシブ君は可能性に拘るあまり蓋然性を考えないようだ

    823 = :

    ”無名関数”というのはあくまで定義が「無名関数定義」というだけであって
    その定義によって作られる関数が必ずしも「無名関数」となるわけではない
    なるのは変数やプロパティに入れない即時関数呼出のケースなどに限られる

    824 = :

    >>816
    今までの話でnew出てきてないじゃん?

    newの説明もつけ加えるならば、クラスもfunctionなのだから
    thisという引数がある。

    function Klass(this) {・・・}

    このKlassを、Klass()と呼び出せば、ドットがないので
    Klassのthisはグローバルオブジェクトのwindow。

    obj.klass = Klass などして、obj.Klass() と呼び出せばthisはobj。

    ここまでは一緒。

    今まで出てきてないnewの話を「追加」するならば、
    new Klass() と実行すると、Klassのインスタンスになるってだけだよ。

    ルールをまとめると、ある関数を呼び出す時
    ・ドットの左側がある・・・this引数にドットの左側のオブジェクトが入る
    ・ドットの左側がない・・・this引数にグローバルオブジェクト(window)が入る
    ・callやapplyを使っている・・・ドットの左側と無関係に、callやapplyの第一引数がthis引数に入る。
    ・newを使っている・・・インスタンスオブジェクトが作ら、そのオブジェクトが入る。

    825 = :

    「オブジェクトが付かない関数呼び出し」ってわからんでもないけど、もやもやする
    あんま仕様に詳しくなさそう

    826 = :

    出てきてないじゃんて
    自分で例に使ってるクソコードを棚に上げて何言ってんだよ
    頭おかしすぎる

    827 = :

    というか、>>796で解決したんじゃ?
    終わった質問にいつまでも解説を続けている気がする

    828 = :

    >>802にnew書いてないじゃん

    829 = :

    クラスもfunction?
    クラスというのは別に関数である必要もない
    前スレで合ったようなプロトタイプを活かしたチョットRubyっぽい
    オブジェクトであるメソッドの寄せ集め構造を書いても立派なクラスだろ

    830 = :

    クソコード、クソコードとうるさいな
    理解したくもないなら黙ってればいいのに

    831 = :

    >>825
    だって他に簡単な言いようがないじゃん?
    ThisBinding無しっていうと.call(null)でもできちゃうし

    832 = :

    グローバルオブジェクトが渡されるというのもちょっとニュアンスが変じゃないか?
    thisがnull/undefinedのときにグローバルオブジェクトになったり、ボックス化されるのは
    sloppyモード時のむしろ例外に近いような動作で処理の後ろのほうだ

    833 = :

    >>802 のこの部分に注目な。

    function appendFunction (this, fn1, fn2) {
     // ★
     return function (this) {
      // ☆
      fn1.call(this);

    >>796 では thisが引数にないから、thisはどうなるの?って混乱する。
    function appendFunction (fn1, fn2) {
     return function () {
      fn1.call(this);


    でも>>802だとわかるだろう?
    appendFunctionの中身、★の部分ではthisはappendFunctionを呼び出した時の
    ドットの左側になるが、☆の部分では無名関数の引数のthisによって
    外の(appendFunctionの)this変数が隠されている。

    834 = :

    >>825
    わかりやすい説明を頼む

    835 = :

    appendFunctionという名前と中身が噛み合ってない。

    836 = :

    まだやんのかこいつ

    837 = :

    > ○ ドットの左側がなければグローバルオブジェクト(window)だ
    Non Strcit Modeではundefinedというのは蛇足なので指摘不要かなと思ったが、他の人が指摘してくれた、嬉しい

    838 = :

    >>832
    だから、なんで分からない人への説明が
    更に分かりにくい内容になってるんだよ・・・

    839 = :

    >>827のいうように終わった質問で延々と議論するのは不毛ではないですかね?
    質問者そっちのけで議論する意味があるとは思えないのですが

    840 = :

    >>838
    だから、なんで分からない人への説明を
    超分かりにくい内容でするんだよ・・・

    841 = :

    とりあえず長文書けば説明したことにするのやめませんかね
    それ説明した気になってるだけなので

    842 = :

    別にappendFunctionを用いて説明する必要ないだろ。
    もっと簡略化したとこから説明してやればいいのに。

    843 = :

    >>834
    hoge();

    844 = :

    厳密には違う部分も見受けられるが、初心者向けの説明としてはこの辺でいいのでは?
    http://qiita.com/takeharu/items/9935ce476a17d6258e27
    ぐだぐだと長文で説明するだけ無駄

    845 = :

    796だけど言われてる通り796時点でバッチリ解けた
    ほんとすまん

    846 = :

    >>840
    俺の説明で氷解したって言ってるけど?w

    847 = :

    いやそもそもお前がややこしくしたんだろ…

    848 = :

    >>844
    > ぐだぐだと長文で説明するだけ無駄

    いや、そこに書いてある文章よりも、
    このスレの説明のほうが短いんだがw

    それにその文章は、this引数が内部の関数のthis引数で
    隠されるということが説明されていない。

    849 = :

    >>848
    まて
    まだ何か勘違いしてないか

    850 = :

    >>849
    俺の説明で氷解したって言ってんだからもういいだろw
    質問者に分かる説明をしろ。
    意図的にやってるのに、俺の揚げ足を取るんじゃない。


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について