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

    私的良スレ書庫

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

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    651 : 641 - 2018/10/26(金) 21:35:04.99 ID:???.net (+77,+30,-228)
    どうもありがとうございます
    結果的にPythonスレとマルチポストになってしまっていたらごめんなさい。

    >>647
    PythonスレのRubyの方ですかね?
    その節はありがとうございます。
    初心者用というのはHTML5の初心者という事ですよね?
    よく分かる〇〇とかいちばんやさしい〇〇だとか過去に読んだことあるんですが、その手の本ってパソコンそのものの初心者が対象なのか、
    〇〇のコードを使ったらハンバーガーメニューが出せますとか、このコードを使ったらこういうレイアウトに出来ます。今流行りのスマホPC両対応のレスポシブなんちゃらのカッコいいホームページを作ろう、みたいな。
    そういう本って理屈は置いておいて、カッコよさげなホームページが作れた。よかったね、っていう感じの本だから、
    それぞれのコードの中身や用語の解説じゃないから結局提示されたcssのコピペだけで終わり訳もわからず応用が利かず結局何も身に付かなかったです。
    オライリーからPythonの本が大量に出てるけどそんな感じの本があればいいんですが。

    >>648
    やっぱ甘えてますね、自分。
    辛いけど、出来るようになりたいから読むしかないのかぁ。
    652 : 641 - 2018/10/26(金) 21:35:51.39 ID:???.net (+172,+30,-259)
    >>649
    Webサイト作りそのものには全く感心は無いんですが、Pythonを学ぶうちに作ったデータの可視化をWebでやりたくなりました。
    Pythonを学んだら今までは怖かったJavaScriptも基本的な文法はPythonで書いた場合を考えながらやればJavaScriptでもSwiftでもObjective-Cも何となく理解出来るようになりました。
    JavaScriptもWeb用のナニカじゃなくて、これもPythonと同じプログラム言語だと分かったのでおもしろくなってきたました。

    XMLを弄るにもXPathが分かれば簡単に弄れそうなんですが、XPathそのものが難しい。
    Chromeの開発者ツールの使い方も分からないままだし。

    >>650
    けど、正論だと思いました。


    オライリーからHTML5という本が出てますけれど、7年以上前の本だからやめておいた方がいいでしょうか?


    >>642 で読んでる本の最初のページにこんなイラストが載ってました。
    まさに自分もこんな認識です。
    653 : Name_Not - 2018/10/26(金) 22:05:29.26 ID:???.net (+85,+29,-67)
    >>652
    セレクタを覚えるなら、jQueryよりCSSを覚えた方が良い
    jQuery拡張記法を覚えても何にもならん
    http://triple-underscore.github.io/selectors4-ja.html

    XPathは今でもCSSセレクタ以上の事が出来るが、日本語の資料は多くないので、初心者向きではないだろうな
    654 : Name_Not - 2018/10/26(金) 22:10:26.33 ID:???.net (+6,-30,-23)
    >>646
    Array(10).length = 1; // これはsetterでは?
    655 : Name_Not - 2018/10/26(金) 23:44:44.27 ID:???.net (+45,-30,-185)
    getter, setterという場合、
    Array(10).getLength();
    Array(10).setLength(5);
    などのようにメソッドの形を取る。

    Array(10).length = 1;
    は上のsetLengthとやることは同じだが、(実装はどうあれ)プロパティ形式を取っているのでsetterとは呼ばない。

    なお説明に使っただけでArrayにgetLength、setLengthとあったメソッドは無い。
    656 : Name_Not - 2018/10/27(土) 06:58:31.07 ID:???.net (+37,-29,-46)
    TypedArrayのlengthはgetter,setterだが
    Arrayのlengthは内部プロキシが特別に扱っている名前というだけ
    657 : Name_Not - 2018/10/27(土) 08:54:32.87 ID:???.net (+66,+30,+0)
    658 : Name_Not - 2018/10/27(土) 10:10:23.05 ID:???.net (+15,-29,-25)
    >>657
    Atrayのlengthはset/getが使えなかったときからある。だから>>656
    659 : 646 - 2018/10/27(土) 18:26:45.84 ID:???.net (+3,-30,-228)
    漏れが、XPath を使うのは、CSS セレクターでできない場合だけ。
    例えば、5ch の書き込み内のa タグを抜き出すなら、

    このCSSセレクターでできるけど、
    div.thread > div.post > div.message > span > a

    a を含む、post_node だけを抜き出す場合、
    div.message の子孫で、aタグを含むものがある場合、
    そのaタグの祖先のdiv.post を抜き出す。
    (自分の処理では、div.postを主体に処理している場合)

    CSSセレクターでは、div.message div.post a

    descendant は子孫、ancestor は祖先。
    post_nodes = doc.xpath "//div[@class='thread']/div[@class='post']/div[@class='message']/descendant::a/ancestor::div[@class='post']"

    子孫に何々要素がある場合の、その祖先を求めるとか、
    条件が複雑で、CSSセレクターでは表せない場合だけ、XPathを使う

    jQueryのCSSセレクター一覧表を見て、それでできなければ、XPathを使う
    660 : Name_Not - 2018/10/27(土) 19:38:24.03 ID:???.net (+24,-29,-11)
    :has擬似クラスが仕様に入ったからXPathの出番はますます無くなる
    661 : Name_Not - 2018/10/27(土) 22:40:17.34 ID:???.net (+46,+20,-1)
    >>660
    これマジうれしい
    662 : Name_Not - 2018/10/27(土) 23:59:35.53 ID:???.net (-1,-29,-28)
    jQueryは:hasに独自で対応しているから、JavaScriptでは
    もうXPathの出番はなくなってるね。
    663 : Name_Not - 2018/10/28(日) 00:21:16.71 ID:???.net (+6,-29,-27)
    XPathってJavaScript以外で使えたっけ?
    jQueryで:hasが使えるならもういらないような
    664 : Name_Not - 2018/10/28(日) 00:36:19.99 ID:???.net (+8,-20,-11)
    >>663
    なに言ってんだ各言語にライブラリ出てるよXPathくらい…
    665 : Name_Not - 2018/10/28(日) 08:23:02.53 ID:???.net (+23,-28,-31)
    >>658
    その理屈はおかしい
    lengthはProxyがない時代からある
    666 : Name_Not - 2018/10/28(日) 11:37:15.18 ID:???.net (-1,-29,-13)
    漏れは、Ruby のNokogiri で、XPath, CSS セレクターを使っている
    667 : Name_Not - 2018/10/28(日) 13:38:53.56 ID:???.net (+50,+16,-3)
    >>656
    文盲かな?
    668 : Name_Not - 2018/10/28(日) 13:39:15.20 ID:???.net (+39,+13,+0)
    >>665だった。
    669 : Name_Not - 2018/10/28(日) 14:38:20.99 ID:???.net (+11,-30,-96)
    Proxy APIの話ではなくプロパティが設定されるときに働く
    [[DefineOwnProperty]]内部メソッドをオーバーロードしてlengthを書き換えてることを
    分かりやすく内部プロキシと言い換えただけなのにね
    670 : Name_Not - 2018/10/28(日) 22:26:18.35 ID:???.net (+52,+29,-4)
    漏れ、って久しく見ないな
    懐かしい
    671 : Name_Not - 2018/10/29(月) 09:06:25.00 ID:???.net (+9,-30,-122)
    >>667-659
    同じ言葉をそっくり>>658に返したいね

    > Atrayのlengthはset/getが使えなかったときからある。だから>>656
    setがなくても、setterとして機能があればsetterだろう
    lengthプロパティ代入時に処理が働くのだから、setter以外にそれを実現する方法はない

    ついでにいうと、>>655もおかしい
    プロパティだからsetterじゃない、とかどの言語の話だ?
    672 : Name_Not - 2018/10/29(月) 09:11:35.57 ID:???.net (+6,-29,-9)
    >>669
    >>654からどうしてその話が出てくるんだ?
    おまえのいってるのは、
    Array(1)[3] = 1;
    だろう
    673 : Name_Not - 2018/10/29(月) 10:27:51.41 ID:???.net (+9,-29,-112)
    Proxyでのハンドリングもsetterと言うのならArray#lengthもsetterと呼んでいいと思うけど
    普通JSでsetterって言ったらプロパティディスクリプタがアクセサタイプでsetにメソッドが入ってる状態を言うと思うけどな
    674 : Name_Not - 2018/10/29(月) 10:29:06.09 ID:???.net (+7,-21,-21)
    >>672
    いや、数値文字列と、lengthの2種類ともを特別に扱ってるんだよ
    675 : Name_Not - 2018/10/29(月) 12:34:14.87 ID:???.net (+38,-30,-127)
    >>673
    あなたのいう、setterとProxyの違いは何だ?
    lengthは余所から書き換えられる場面は多々あるが、lengthそのものはProxyを使うほどの機能があるとは思えんのだが
    http://www.ecma-international.org/ecma-262/9.0/#sec-properties-of-array-instances-length
    676 : Name_Not - 2018/10/29(月) 19:36:10.52 ID:???.net (+60,+27,-21)
    でlengthはなんて呼んだら良いの?
    http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/length
    これも直した方が良いってこと?
    677 : Name_Not - 2018/10/29(月) 19:41:22.88 ID:???.net (-1,-29,-72)
    MDNはprototype経由せずDateやらArray やらから直接生やされたメソッドを静的なメソッドと表現したりクラスベースの人に配慮した柔軟な記述見かけるよね。
    678 : Name_Not - 2018/10/30(火) 06:56:22.75 ID:???.net (+79,+29,-8)
    >>675,676
    その疑問は全てここまでに書かれてるよ
    もう一度読み直してみて
    679 : Name_Not - 2018/10/30(火) 08:34:44.71 ID:???.net (+12,-30,-158)
    >>678
    > [[DefineOwnProperty]]内部メソッドをオーバーロードしてlengthを書き換えてることを
    > 分かりやすく内部プロキシと言い換えただけなのにね

    これがProxyの条件か?
    ただの内部 プロパティを書き換えるだけでProxy扱い
    しかも、Array(19).length = 1; 時に [[DefineOwnProperty]] が書き換わらんし、到底理解できんな
    680 : 678 - 2018/10/30(火) 08:40:23.79 ID:???.net (+16,-30,-157)
    > しかも、Array(19).length = 1; 時に [[DefineOwnProperty]] が書き換わらんし、到底理解できんな

    訂正する
    Array(19)[1] 以降が削除されるので、[[DefineOwnProperty]] は確かに書き換わる
    しかし、他所のプロパティ [[DefineOwnProperty]] が書き換わるだけで、lengthプロパティはProxyの動きをしていない
    681 : Name_Not - 2018/10/30(火) 09:16:03.64 ID:???.net (+3,-30,-178)
    こういう事かな

    const a = [];
    a[0] = 1; // 668「a[0] はProxyなプロパティです」→OK
    a.length = 0; // 668「a[0]を書き換えるa.lengthもProxyなプロパティです」→ん?

    この場合、a.lengthを書き換えるa.fooを定義したら、a.fooもProxyになる
    Proxyが感染していく
    682 : Name_Not - 2018/10/30(火) 12:07:55.19 ID:???.net (+52,-4,+0)
    hey YO! チェケラッチョ!
    683 : Name_Not - 2018/10/30(火) 12:55:41.57 ID:???.net (+9,-30,-236)
    >>680
    大きな勘違いしてるね、Arrayのインスタンスオブジェクトはlengthと言う通常のプロパティを持っているが
    それと同時に数値文字列と"length"という文字列のプロパティ設定に関して特別な振る舞いをするんだよ
    つまりProxyのようなのはArrayのインスタンスの事であって、
    そのプロキシは"length"プロパティアクセスがあると、間接的にlengthプロパティを設定して配列の要素を調整すると言う動作をするんだよ
    ただし、setterとは違うという話
    684 : Name_Not - 2018/10/30(火) 13:09:50.35 ID:???.net (+57,+29,-8)
    ようそこまで内部動作把握してるな
    こういう人はそんなの当然って言うんだけど大半の人はそんなの無理
    685 : Name_Not - 2018/10/30(火) 14:08:55.83 ID:???.net (+55,+27,-4)
    アニメスレに沸く小説板から来た設定厨を思い出しました。
    686 : Name_Not - 2018/10/30(火) 19:02:56.34 ID:???.net (+7,-28,-22)
    >>683
    勘違いなどしていない
    setterのトラップで内部プロパティが書き換わるだけ
    setter以外のトラップが必要なら、それを示してくれ
    687 : Name_Not - 2018/10/30(火) 19:11:18.70 ID:???.net (+98,+29,-3)
    >>682
    やっとわかった
    ラッパーって言いたいのかw
    688 : Name_Not - 2018/10/30(火) 19:19:02.36 ID:???.net (+71,+29,-6)
    >>687
    誰もわかってくれないからって自己レスするな
    689 : Name_Not - 2018/10/30(火) 19:23:08.67 ID:???.net (+0,-29,-5)
    >>669は確かにwrapperって感じだが、wrapperとsetterは両立出来るんだよなあ
    690 : Name_Not - 2018/10/30(火) 20:13:36.59 ID:???.net (+57,+29,-3)
    わかっててスルーしてるにきまっとるじゃろ
    691 : Name_Not - 2018/10/30(火) 21:00:05.07 ID:???.net (+0,-29,-34)
    ぶっちゃけ、>>654がsetterで実装できなくて、Proxyでなければ実装できない機能って何なの?
    692 : Name_Not - 2018/10/30(火) 21:50:37.00 ID:???.net (+65,-30,+0)
    >>686
    勘違いというか、全く分かっていなかったんだね
    実際Arrayオブジェクトのlengthはsetterではないということが話の肝

    Arrayのlengthは普通のオブジェクト固有のプロパティだ
    Object.getOwnPropertyDescriptor( Array(1), 'length' )
    // {value: 1, writable: true, enumerable: false, configurable: false}

    参考までにTypedArrayのlengthは共通親クラスから継承したgetterだ
    Object.getOwnPropertyDescriptor( Uint8Array.__proto__.prototype, 'length' )
    // {get: ƒ, set: undefined, enumerable: false, configurable: true}

    ならArrayのlengthへ値を代入したときの振る舞いなどはどう説明するのかといえば、
    Arrayオブジェクトのプロパティ設定のトラップでlengthを特別扱いしてるということだ
    そしてそれはもちろんsetterとは違う

    言い換えればArrayオブジェクトはそのただ1点を除いて普通のオブジェクトと何にも変わらない
    [ 'a', 'b', 'c' ]は{ '0':'a', '1': 'b', '2': 'c', 'length': 3 } と全く違いはない
    ただたった一つ、[[DefineOwnProperty]]内部メソッドの振る舞いが違う、
    プロパティアクセス時に'length'と数字プロパティへの設定を特別に監視するということだけが
    ArrayをArrayたらしめてる理屈
    693 : Name_Not - 2018/10/30(火) 22:04:42.06 ID:???.net (+5,-30,-219)
    >>680のこの行がそもそもだいぶトンチンカン
    >>Array(19)[1] 以降が削除されるので、[[DefineOwnProperty]] は確かに書き換わる
    [[DefineOwnProperty]]は内部「関数」なのだから、書き換わったりしない、呼ばれる対象
    そしてlength要素に設定時に適宜配列のプロパティが消されるから呼ばれるのではなくて、
    length要素設定時にこれが呼ばれたときに間接的にプロパティを消してる、因果が逆
    因みにプロパティが消されるときに呼ばれるのは[[Delete]]
    [[DefineOwnProperty]] はこの場合関わらない
    694 : Name_Not - 2018/10/30(火) 23:07:23.33 ID:???.net (+57,+29,+0)
    >>692
    へー知らなかった
    696 : Name_Not - 2018/10/31(水) 01:25:47.55 ID:???.net (+46,+29,-14)
    >>695
    ザコは黙ってろ
    697 : Name_Not - 2018/10/31(水) 11:52:21.98 ID:???.net (+59,+28,-1)
    >>692
    勉強になったわ
    698 : Name_Not - 2018/10/31(水) 15:55:58.36 ID:???.net (+3,-30,-109)
    new Int8Array([1,2,3]).__lookupGetter__('length')
    //=> f length() { [native code] }
    [1,2,3].__lookupGetter__('length')
    //=> undefined

    ほんまやTypedArrayのlengthにはGetter設定されてるけどArrayは無い
    699 : Name_Not - 2018/10/31(水) 15:56:05.22 ID:???.net (-1,-29,-22)
    だからtypeof new Arrayは'object'なんだよな
    そこしか違いがないから
    700 : Name_Not - 2018/11/01(木) 02:16:21.76 ID:???.net (+57,+29,-20)
    大雑把にはわかっていたつもりだったけど
    詳しい説明ありがたいわ
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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