元スレ+ JavaScript の質問用スレッド vol.142 +
JavaScript覧 / PC版 /みんなの評価 :
851 = :
最初は>875さんが!fと!!fを見間違えただけなのかな?と思ってたのですが
違うっぽい?
852 = :
>>885
まず>>874の前半の方は
Hogeはコンストラクタ関数でnew Fuga()って書いてるので
new Hoge() でコンストラクタ関数が発火して、new Fuga()
このFugaはHogeを継承してるから
Hogeのコンストラクタ関数がまた走る
Hogeのコンストラクタ関数がまた走る
Hogeのコンストラクタ関数がまた走る
:
っていう無限ループ
if節をもちいた後半に書いてあるやつは
1回目は var hoge = new Hoge(true); ってしてるから
Hogeのコンストラクタ関数にはtrueが渡り
if節がtrueだから、new Fuga()する
このFugaはHogeをextendsしてるから
Hogeのコンストラクタ関数がまた走るけど(2回目)
このときは引数なしだからif節はfalseになり、動かず終わる
853 = :
まず自分が間違ってるんじゃないかという姿勢がないとデバッグはできない
もちろん機械が間違っていることもあるが、それは雰囲気ではなくて言い逃れできないくらいの
理詰めと証拠と再現性による証明ができて初めて主張できること
854 = :
自分が間違っていると思う自分は間違ってる
855 = :
>>895
なるほど
>空呼び
とは、FugaがnewされてHogeコンストラクタ関数が走る、
>いつ、>falseのとき
2回目以降のことだったんですね
(2回目以降のreturnでvar hogeに格納されない)
つまり疑問である>>874
>これはなんかのテクニックなのでしょうか??
>それとも普通はこんなことしないということでしょうか
は、回避処理をしたとしても普通は"空呼び"はやらない and 親のコンストラクタ内で子をnewしない(機会はない)
ということでしょうか
というのは、>871のライブラリの基礎部分をclass構文で表現してみたい
というのが本題で、kabn84szコードは$()すると毎回、return this(親?)”も”しているので
無駄や不自然さがあると、今回のやりとりで感じました
なので>>882のpmrhub5yコードがclass構文表現の一例でいいかなと
新たに出た疑問は
・『全部まとめて毎回親をnewする』4o3zq1v5コードと『毎回継承の子だけnewする』pmrhub5yコードの(コードの見た目以外の)違いや利点がわからない
・class表現にした場合、$文字で親の静的メソッドが使えない($.eachじゃなくjQuery.eachとしないといけない?)
この辺りを調べてみたいと思います
ありがとうございました
856 = :
gotoはコードの色んな所にジャンプできる。
だけどbreakはループの外にしかジャンプできない。
gotoの方が優れているように見えるが、
機能を制限したbreakの方が好まれてる。
何が言いたいかというと汎用的なものより
特定の(よく使われる)用途に制限したほうが
バグが少なくなり、コードはよりわかりやすくなる
それがclassでありシンタックスシュガーが優れていると言われる理由
だけど、機能自体はgotoの方が上なわけで
人が間違わないという前提にたてば、機能を制限したものよりも
より多くのことができる。つまりclassを使わないほうがより柔軟
857 = :
なるほど 時代の流れはclass表記のみなっていくのかと勝手に思っていましたが
固執すること無く適所に取捨すればよかったのですね
(同じ変数名で親の静的メソッドも実行できるというのはやはり魅力なのでclass表記は向いていない、のかもしれない)
あとプログラミング言語界も、文書でいうところの”ですます”調・”だである”調は揃える、
みたいなことは気にしたほうがいいのかどうかは気になります
858 = :
JSのクラス構文は何かを制限するような機能はまだ弱いしその様には使われていない
見た目と構造化効率のために使われている
859 = :
今はTypeScriptも人気あるしねぇ。必ずしもclassありきじゃない。
861 = :
プププ
862 = :
>>898
>親のコンストラクタ内で、子をnewしない
こんな事をする香具師は、いないw
逆に、子のコンストラクタ内で、
super( ) みたいに、親のコンストラクタを呼び出す言語は、あるかも
一般的に、オブジェクト指向では、
子のメソッド内で、super( ) みたいに、親の同名のメソッドを呼び出す言語は、あるかも
子は親を継承しているから、親の部分を含んでいる。
だから、子を作る時に、親の部分も作るから、
その時に、super( ) を呼んで、親の部分をカスタマイズしたい
863 = :
rubyキチガイは呼んでない。
865 = :
コンセントを引っこ抜く
866 = :
>>822
超ありがとうございます。
まさかオブジェクトが定義中だったとは思いもしませんでした。
一度オブジェクトの定義を済ませた後にプロパティを追加すればよいのですね!!
追加で質問がありまして、>>834 さんの記述に近いのですが、
下記記述のように関数の中であれば、定義中のオブジェクトのプロパティを扱うことができるようなのですが、
エラーにならないのは、オブジェクトの定義が済んだ後に関数を呼び出しているから・・・
と考えればよいのでしょうか?
var obj = {
a: 3,
b: 4,
c: function() {
console.log(obj.a + obj.b);
},
};
obj.c(); // 7
867 = :
うん
870 = :
こいつの頭のおかしいところは、これでrubyとかいうクソ言語の宣伝になると思ってるところ
871 :
スレタイも読めないガイジになに言っても無駄だな。
872 = :
10年前ならまだしも今のこの過疎2chと繁栄したJS界を鑑みるにRubyの4文字程度に反応する必要もない
873 = :
地の文というパワーワード
874 :
【環境】Windows10 IE11
前提として複数URL文字列が格納された配列を保持しています
これらを全て(できるかぎり)自動で印刷する動作を実現したいです
まず下記を書きました
function hoge{
for(var i = 0; i < url.length;i++) {
subwin = window.open(url[i],"_blank","top=0,left=0");
subwin.print();
subwin.close();
}
}
エラーは発生しませんでしたが、全てのURLが子画面で同時に開かれ、
さらに印刷ダイアログが開かれた子画面は1個だけしか残りませんでした
【期待する結果】
親画面でボタンが押される→
→url[0]が開かれ、自動的に印刷ダイアログが表示→印刷ボタンを押すと自動的に閉じられる
→url[1]が開かれ、自動的に印刷ダイアログが表示→印刷ボタンを押すと自動的に閉じられる
→全ての配列分繰り返す
…という流れにしたいのですが、IE11の印刷ダイアログ画面は常に一つしか開けないようで
そこでさらにwindow.openすると強制的に閉じられてしまい、さらにその後のwindow.closeで勝手に閉じられ
結果的に印刷ボタンを押せるのは1つだけ、という状況のようです
これを解決する方法があれば教えていただきたいです
875 = :
ActiveXを使ってシリアルポートを叩いてプリンタの状態を確認すればできる
876 = :
閉じられたら次を開けばいい 一度に全部開くやつがおるか アホか
877 = :
selenium webdriver で、ブラウザを自動操作して、印刷できないのかな?
878 = :
>>919
onunloadを書くとしたら子窓が閉じられる時になると思いますが
そうなると次に開くURLをリレーのように渡し続ける必要がありませんか
879 = :
>>917 無理かも
var url=["https://google.com/","https://twitter.com","https://google.co.jp/"];
function subwinprint(){
console.log("subwin print");
var _url=url.shift();
if(!_url){ return; }
var subwin = window.open(_url,"_blank","top=0,left=0");
subwin.print();
subwin.close();
}
window.onafterprint = subwinprint;
subwinprint();
880 = :
>>921
リレーのように渡し続けたら?
881 = :
916です
>>922
ありがとうございます
残念ですが思ったような動作はしませんでした(url[1]とurl[2]が同時に開かれました)
後付けになってしまって申し訳ありませんが、
配列として保持するURLも自分の管理内なので子画面にもJavascriptは自由に記述できます
なので、onbeforeunloadとwindow.openerで子画面が閉じられる際に親画面に何らかの処理を
渡せれば…と今のところ考えています
882 = :
>子画面にもJavascriptは自由に記述できます
と、なるとURLは新しいタブで開くようにして
親に、
var turn=1;
var url=["https://google.com/","https://twitter.com","https://google.co.jp/"];
document.addEventListener('webkitvisibilitychange', function(){
if(url.length===0){return}
if (!document.webkitHidden && turn===2 ) {
window.open(url.shift());//①
}
turn=3-turn;
}, false);
window.open(url.shift());
子に、
プリント画面終了を感知したらwindow.closeする処理
→親タブに戻る→①→子→親タブに戻る→①・・・
になるような
883 = :
全部一画面に表示して
1つ1つの間で改ページするようにしたらいかんの?
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.142 + (984) - [100%] - 2020/8/27 19:15
- + JavaScript の質問用スレッド vol.102 + (1001) - [97%] - 2012/9/11 17:30
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.122 + (116) - [97%] - 2018/5/2 18:30
- + JavaScript の質問用スレッド vol.141 + (881) - [97%] - 2021/4/19 9:00
- + JavaScript の質問用スレッド vol.140 + (1001) - [97%] - 2019/9/19 10:45
- + JavaScript の質問用スレッド vol.141 + (1001) - [97%] - 2019/9/22 23:15
- + JavaScript の質問用スレッド vol.143 + (753) - [97%] - 2020/4/19 5:00
- + JavaScript の質問用スレッド vol.144 + (288) - [97%] - 2020/5/17 20:00
- + JavaScript の質問用スレッド vol.122 + (1004) - [97%] - 2015/2/14 4:45
- + JavaScript の質問用スレッド vol.123 + (966) - [95%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.123 + (1002) - [95%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.115 + (1001) - [95%] - 2014/5/29 16:16
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.120 + (1002) - [95%] - 2014/11/8 1:15
トップメニューへ / →のくす牧場書庫について