元スレ+ JavaScript の質問用スレッド vol.128 +
JavaScript覧 / PC版 /みんなの評価 :
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
質問者に分かる説明をしろ。
意図的にやってるのに、俺の揚げ足を取るんじゃない。
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.125 + (1001) - [97%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.108 + (1001) - [97%] - 2013/9/21 15:16
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.120 + (1002) - [97%] - 2014/11/8 1:15
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.122 + (1004) - [97%] - 2015/2/14 4:45
- + JavaScript の質問用スレッド vol.122 + (116) - [97%] - 2018/5/2 18:30
- + JavaScript の質問用スレッド vol.123 + (966) - [97%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.138 + (1004) - [97%] - 2019/4/20 23:45
- + JavaScript の質問用スレッド vol.129 + (981) - [97%] - 2016/5/5 8:16
- + JavaScript の質問用スレッド vol.129 + (926) - [97%] - 2017/7/27 13:45
- + JavaScript の質問用スレッド vol.123 + (1002) - [97%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.127 + (1001) - [97%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [97%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.126 + (952) - [97%] - 2015/11/18 13:15
- + JavaScript の質問用スレッド vol.126 + (348) - [97%] - 2023/1/12 17:00
トップメニューへ / →のくす牧場書庫について