のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,646,459人
昨日: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,-229)
どうもありがとうございます
結果的に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,-186)
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,-10)
: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,+17,-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,-123)
>>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,-113)
Proxyでのハンドリングもsetterと言うのならArray#lengthもsetterと呼んでいいと思うけど
普通JSでsetterって言ったらプロパティディスクリプタがアクセサタイプでsetにメソッドが入ってる状態を言うと思うけどな
674 : Name_Not - 2018/10/29(月) 10:29:06.09 ID:???.net (+6,-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 (+53,-3,+0)
hey YO! チェケラッチョ!
683 : Name_Not - 2018/10/30(火) 12:55:41.57 ID:???.net (+8,-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 (+6,-28,-22)
>>683
勘違いなどしていない
setterのトラップで内部プロパティが書き換わるだけ
setter以外のトラップが必要なら、それを示してくれ
687 : Name_Not - 2018/10/30(火) 19:11:18.70 ID:???.net (+99,+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,-110)
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 スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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