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

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
801 : Name_Not - 2019/12/18(水) 12:11:04.53 ID:???.net (+7,-30,-31)
>>842
> 1から100までの値がランダムで配列される時に

日本語を頑張れ

> indexOf("1")>=0?"りんご"にすると
> 10もりんごになっちゃいます。

Array#indexOfは10にマッチしない
802 : Name_Not - 2019/12/18(水) 12:21:29.03 ID:???.net (+38,-30,-26)
[2,3,10] は、数値の配列でしょ?

indexOf("1")
"1" は、文字列じゃん

型が異なると、バグる
803 : Name_Not - 2019/12/18(水) 14:32:50.74 ID:???.net (+6,-24,-21)
>>840
まじで???

デフォで送れないのは今でもそうだけど
csedentialはどうなっちゃうの?
804 : Name_Not - 2019/12/18(水) 15:00:48.35 ID:???.net (+56,-29,-52)
>>846
corsでcookieが扱えなくなるのは俺も知らんけど
Ajaxするときのcredentialがなくなることはなかろう
805 : Name_Not - 2019/12/19(木) 09:00:50.12 ID:???.net (+3,-30,-126)
function hoge(callback){
console.log( callback(10,20) );
console.log("callbackの引数の名前を知りたい xxxとyyy");
console.log(callback.toString().match(/^\((.*),(.*)\)/).filter((_,i)=>i%3!==0));
}
hoge((xxx,yyy)=>xxx+yyy);

と、しましたがもっとスッキリ書けないものでしょうか?
806 : 847 - 2019/12/19(木) 09:04:39.31 ID:???.net (-1,-29,-28)
引数が一個のときも考慮したいし
function()なんたらのときも
_=> みたいに()が無いときも考慮するには
やはり全部の場合分けしかないのでしょうか?
807 : Name_Not - 2019/12/19(木) 10:55:15.25 ID:???.net (+86,+19,-92)
引数の数が異なるなら、オブジェクト指向で言う、関数のoverload・多重定義だろ。
JavaScript には無いけど、jQuery は、引数の型を調べて、場合分けして作っていたかも?

デフォルト値ありの引数か、配列・辞書渡しにするか。
オプションなどは、辞書で渡す

引数の数が変わる、可変引数もあるのか?
808 : Name_Not - 2019/12/19(木) 13:25:23.48 ID:???.net (+47,+29,-12)
うるさい糖質
809 : Name_Not - 2019/12/19(木) 16:02:12.63 ID:???.net (+68,+29,-81)
>>850
とりあえず引数名が何個で何かを判別するオプションを引数に入れて多重定義で一時的に対応することにしました
ただ引数名は限定的になりそうなので渡す関数の書式を制限して関数そのものの文字列から判別する方法もやろうと思います
ありがとうございました
810 : Name_Not - 2019/12/19(木) 16:41:00.17 ID:???.net (+62,+29,-39)
>>848
関数の引数の定義上の文字列を知りたい
という要望が特殊すぎるような気が

ちなみにこの文字列を知って
どのような使い方を考えているのん?
811 : Name_Not - 2019/12/19(木) 17:03:32.67 ID:???.net (+12,-30,-45)
>>853
例えばforEachするときやmapするとき
最初の引数はindexだったかそれともvalueだったか?忘れてしまうことが多かったので
callbackの記述が
function(index,value),function(index),function(value),function(value,index)だったら
その通りに勝手に解釈してもらいたいなぁと思ったのです
812 : Name_Not - 2019/12/19(木) 17:08:12.28 ID:???.net (+69,+29,-41)
>>854
ワロタ
それは、JSでやるべきじゃないんじゃないかなあ
テキストエディタとかトランスパイラとか
JSコードになる以前の問題なんじゃないかと
813 : Name_Not - 2019/12/19(木) 17:12:15.59 ID:???.net (+3,-29,-35)
アロー関数使うときに、引数が一個しかなければ
i=>{}みたいに書けるけど、引数が2個の場合
(i,val)=>{}と書いて、valしか使わないのに・・
みたいな場面に出くわしてじゃあ最初から
val=>{}で書いたときはーーみたいな感じだったのです
814 : Name_Not - 2019/12/19(木) 18:17:45.23 ID:???.net (+6,-30,-56)
>>854
物忘れ防止なら、JSDocでも書いておけ

>>852
重要なのは、「引数の数」の方だろ
arguments.lengthやrest parameterを使え
815 : Name_Not - 2019/12/19(木) 18:33:42.30 ID:???.net (+57,+29,-40)
まぁ引数の数だけが問題ならイコール引数の順序を覚えている
ということなので、普通に既存のライブラリ使うかなと。
816 : Name_Not - 2019/12/19(木) 19:17:54.31 ID:???.net (+3,-30,-113)
そういうのは型付言語ならできるだろう

map(i:int=>i*2)
map(val:string=>var+"abc")

みたいな感じだ

だが、valもintだったらどうなるだろうか?区別がつかない。
そこでint型とindex型は分けるべきではないだろうか?

map(i:index=>i*2)
map(val:int=>val*2)

つまりこういうわけだな

そして思うのは、indexとかintという型は冗長というわけだ
ならここで型名変数という概念があっても良いのかもしれないな
型名をそのまま変数として使える書き方だ

map(:index=>index*2)
map(:string=>string*2)

夢は膨らんでいくな!
817 : Name_Not - 2019/12/19(木) 19:46:17.14 ID:???.net (+52,+29,-4)
いやもうふつうにあるから。
818 : Name_Not - 2019/12/19(木) 20:23:04.33 ID:???.net (+46,+28,-1)
あるんかーい
819 : Name_Not - 2019/12/19(木) 20:55:36.34 ID:???.net (+57,+29,-39)
何を言ってるんだか ここは阿呆ばかりなのか?
オーバーライドは関数と引数の取り回しが不自由なJavaのような言語で
柔軟さをなんとか実現するための苦肉の策であってJSには最も必要ない部類の機能だろ
820 : Name_Not - 2019/12/19(木) 21:10:06.71 ID:???.net (+37,-29,-10)
オーバーライドじゃなくてオーバーロードな(呆)
JavaじゃなくてC++の時代からあるよ
821 : Name_Not - 2019/12/19(木) 21:48:09.28 ID:???.net (+10,-28,-9)
オーバーライドじゃなくてオーバーロードな ←潔癖症
JavaじゃなくてC++の時代からあるよ ←アスペ
822 : Name_Not - 2019/12/19(木) 22:06:27.88 ID:???.net (+43,-30,-97)
jqueryでアロー関数のthisがwindowになるのなんとかならんの
$([3,4,5]).each(function(){ console.log(this) });
$([3,4,5]).each(()=>{ console.log(this) });
第一引数つかえっていう話ではなく
823 : Name_Not - 2019/12/19(木) 23:34:40.44 ID:???.net (+106,+22,-43)
>>865
jQueryとは関係ない。DOM APIもそうだからどうしようもない
824 : Name_Not - 2019/12/20(金) 00:14:23.85 ID:???.net (+57,+29,-4)
どいつもこいつもどこから突っ込んでいいのやらw
825 : Name_Not - 2019/12/20(金) 06:52:41.54 ID:???.net (+68,+29,-31)
そういう毒にも薬にもならない表明はいらない
826 : Name_Not - 2019/12/20(金) 08:38:34.48 ID:???.net (+13,-4,-3)
827 : Name_Not - 2019/12/20(金) 09:38:36.23 ID:???.net (+53,+25,-26)
ES6 のアロー関数は、たぶん、クロージャなんだろ。
外の環境のthis を、そこまでの文脈で、静的に確定させて取り込んでしまう

レシーバーのthis じゃない
828 : Name_Not - 2019/12/20(金) 10:53:39.50 ID:???.net (+67,-29,-72)
jQueryの基礎部分を書いてみたのですが
http://jsfiddle.net/5nhoL081/
これをclass構文で表現するにはどうやればいいのでしょうか?
http://jsfiddle.net/kabn84sz/
やってはみたものの動くには動いたのですが
if(!f){return thisを外したらinitがnot functionだと言われたり
腑に落ちない点がいろいろとあります
829 : Name_Not - 2019/12/20(金) 11:41:18 ID:???.net (+3,-29,-137)
>>865
jQuery関係ない

functionの中でthisはそもそもグローバル(かundefined)
メソッドやイベントリスナとして発火するときは
そのオブジェクトが束縛(バインド)される

アロー関数はイベントリスナになっても
束縛がないんだね
830 : Name_Not - 2019/12/20(金) 11:43:11 ID:???.net (-1,-29,-44)
あとjQueryのeachとかで使うthisは
ピュアJSのものではなく
jQueryが独自にバインドしているものなのでご注意を
831 : 870 - 2019/12/20(金) 14:33:40 ID:???.net (+3,-30,-273)
class Hoge{
constructor(){
console.log(new Fuga());
}
}
class Fuga extends Hoge{
f(){}
}
var hoge = new Hoge();
//Maximum call stack size exceeded
//となってしまうので
class Hoge{
constructor(f){
if(!!f){
console.log(new Fuga());
}
}
}
class Fuga extends Hoge{
f(){}
}
var hoge = new Hoge(true);
//ifをかますと親コンストラクタで子をnewできるみたいというのはわかりましたが
//これはなんかのテクニックなのでしょうか??それとも普通はこんなことしないということでしょうか
832 : Name_Not - 2019/12/20(金) 15:29:56 ID:???.net (+57,+29,-34)
ifを咬ませてfalseのとき通らない説明はしようがないね
自明だから
833 : Name_Not - 2019/12/20(金) 15:34:17.63 ID:???.net (+52,+29,-20)
>>874
ちなみにこの循環にはどんな意味があるん?
834 : Name_Not - 2019/12/20(金) 15:48:06 ID:???.net (+17,-30,-111)
>>875
>falseのとき
!じゃなくて!!なので、つまり!!trueなのでtrueです
>>876
この循環とは?
例えばライブラリにするときjqueryなら$()で何回も使えますがそれは
$()で返ってくる中身がインスタンスで、かつinitが親のjqueryのprototypeを持っているからです
別に毎回newを宣言するスタイルなら必要ないと思いますが
835 : Name_Not - 2019/12/20(金) 15:55:27 ID:???.net (+21,-12,-10)
ライブラリ内で$()を使っても循環してるわけじゃないだろ
無知って恐ろしいな
836 : Name_Not - 2019/12/20(金) 15:58:25 ID:???.net (+57,+29,-7)
いやそもそも循環って何を指しているかがわからんのです
837 : Name_Not - 2019/12/20(金) 16:54:52.49 ID:???.net (+9,-30,-138)
Hogeがコンストラクタ関数でnew Fuga() してるのに
FugaがHogeを継承しちゃってるからループして
なんどもなんどもフガフガしちゃって
Maximum call stack size exceeded なわけじゃん?

なんでFugaはHogeを継承すんのかなって
838 : Name_Not - 2019/12/20(金) 16:55:43.34 ID:???.net (-2,-30,-78)
FugaからHogeを参照したいだけなら
Hogeのコンストラクタ関数で

new Fuga(this);

ってするだけじゃいかんかね?
839 : Name_Not - 2019/12/20(金) 18:28:27.93 ID:???.net (+75,+28,-126)
>>876,880,881
なるほど、心をまっさらにして改めて考えたところ、すんなり解決しました
http://jsfiddle.net/4o3zq1v5/
initをextendsするのはなぜなのかはわかりませんがそのバージョン
http://jsfiddle.net/pmrhub5y/
そもそもjQueryのソースコードをみるとなぜわざわざinitを継承させているのか
はわかりませんが、つまり
http://jsfiddle.net/rb5czox2/
こういうふうにすればいいのに、と思うのですが・・
$文字で静的なユーティリティ関数を使えるからでしょうか($=jQueryと置くとinitをnewしないといけないので)、わかりません
840 : Name_Not - 2019/12/20(金) 18:36:34.84 ID:???.net (+20,-14,-18)
一応ソースコードそのまま風にinitを継承したやつです
http://jsfiddle.net/ca98kq0z/
841 : Name_Not - 2019/12/20(金) 20:17:42.83 ID:???.net (+62,+29,-21)
>>877
いやいや、空呼びすることになるんだから評価はfalselyでしょ
trueは最初だけじゃん何いってんの
842 : Name_Not - 2019/12/20(金) 20:41:12.89 ID:???.net (+39,-6,-77)
>>884
空呼びとは?
いつ、空呼び?(具体的な行なりを)
最初だけ、とはいつ?(具体的な行なりを)
>>875
>falseのとき
>874コードのどのタイミングで>falseのとき、なのか
>通らない
とは何が?
843 : Name_Not - 2019/12/20(金) 20:59:38.09 ID:???.net (+63,+29,-82)
なんでこれだけヒント上げてんのにconsole.log()を挟んだりして確認しないの?
いつ何がなんて考えたら分かるし
分からないのなら色々試して分かるように見つけるべきでしょ
あんだけの短いコードなんだから

それともnew演算子の挙動から丁寧に何レスも使って長大にド答えを書いてほしいの?
844 : Name_Not - 2019/12/20(金) 21:04:57.57 ID:???.net (+57,+29,-22)
あー…分かんないやつは無理して回答するフリしなくていいからw
845 : Name_Not - 2019/12/20(金) 21:17:34.83 ID:???.net (+70,+30,-132)
わからないことは
>874コードの前半はエラーがでて、後半のコードでは、エラーが出ない、それはなぜか』
ということで、わかってることは
後半コードで『なぜかif()で一旦”間”をとると、エラーが出ない』
ということと『仮に、親の中で子をnewするとエラーがでるなら、後半コードでもif通ったあとにエラーがでるのでは?』
というところまでは、わかっています
その状態で873を質問をしたわけなので
>875で急にfalseの話が出て、ヒントとか以前の問題で
どういうこと?っていう状態なので確認のために>885を聞いたんです
ヒントが欲しいってことではないです
846 : Name_Not - 2019/12/20(金) 21:18:47.10 ID:???.net (+29,-29,-37)
訂正 >親の中で子をnewすると
>親のコンストラクタの中で、子をnewすると
847 : Name_Not - 2019/12/20(金) 21:21:21.72 ID:???.net (+72,+29,-47)
じゃあ逆に考えてみたら良いじゃない
デバッグの基本だよ
後半コードでもif通ったあとにエラーがでるのでは?
ならエラーが出てないのならifを通ってないのでは?
あれどうして通ってないんだっけってなるでしょ
848 : Name_Not - 2019/12/20(金) 21:25:46.38 ID:???.net (+34,-30,-32)
>>890
いえ、、それでconsole.log(new Fuga());
が出力されたわけでして・・
849 : Name_Not - 2019/12/20(金) 21:29:24.97 ID:???.net (-2,-30,-46)
if(!!f){
の前に
console.log(f)
でしょ
if(!!f)の動作はfに依存してるのだから、fを調べないと始まらないでしょ
850 : Name_Not - 2019/12/20(金) 21:31:44.48 ID:???.net (+49,-30,-200)
>>892
ええ、もちろんしてからの>874の質問ですよ
で、>875でなんでfalseの話が出てきたのだろう??ってなったんです

ちなみにもしかして
class Hoge{
constructor(f){
if(!!f){
console.log(new Fuga());
}}}
class Fuga extends Hoge{
f(){}
}
var hoge = new Hoge(true);
これが通るのっておまかんってことでしょうか?
念の為、これ↓はtrueですよね
if(!!true){ console.log(true) }else{ console.log(false) }
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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