2017-09-03 5 views
3

Javascriptイベントデリゲートhttps://javascript.info/event-delegationの非常に一般的なコード例では、変数 "menu"がどこから来るのか混乱しています(http://plnkr.co/edit/91Q9jINXlue2fXiB0fAY?p=preview)。変数はコンストラクタに渡されますが、初期化されることはありません。まだこれは私には本当に混乱して私は長い時間のためにJavascriptを行ってきたJavascriptのグローバル変数の仕様は、DOM要素から初期化されていますか?

<div id="menu">...</div> 
<script> 
... 
new Menu(menu); /* Who initializes "menu". 
... 
</script> 

:自動的にこのdiv要素から作成された変数「メニュー」が表示されます。私はこの質問を一般化する方法もわかりません。

通常、div要素を取得するためにdocument.getElementById( "menu")を実行します。これらの変数はどこで初期化されていますか?また、これらの変数についてはどうすればわかりますか?仕様はありますか?それは、この行から来て

+1

そのドキュメントでhttps://html.spec.whatwg.org/#named-access-on-the-window-object – Caramiriel

+0

あなたが提供できますID変数のこのグローバリゼーションの名前と、それ以外のグローバル変数に変換される情報 –

+0

もう少し学んだことがありますが、私はその質問をより一般的なものに改めました。 –

答えて

0

この変数は、ブラウザとウィンドウ要素のメンバーによって自動的に生成されます。

HTML5の標準は、ウィンドウオブジェクトプロパティを持っている必要があることを指定正確に一つのDOM要素があり

  • 値があればelemはあるキー ... そのプロパティid elemはは値鍵を持っています
  • 正確に1つのDOM要素がありますelemのプロパティnameの値はキーです。 aappletareaembedformframeframesetiframeimgobject:ELEMのタグは、のいずれかでなければなりません。

仕様はここで見つけることができます:Aparantly https://html.spec.whatwg.org/#named-access-on-the-window-object

+0

少し深い感謝。そのための仕様はありますか?私を除いて世界中の誰もがこの行動についてすでに知っているようだ!一方、私は物事がどのように実生活に入るのかを知っています。例えば(私は何も仮定することはできません) –

+0

私はリンクを追加しました。特に短いサンプルやデモを作成するときは、このようなことを知っていることはすばらしいことです。しかし、あなたは通常、実際にそれを使用すべきではありません – maja

+0

ありがとう。私はそれが参照を持っているので、これが私が本当に探していたものです(私は何が起こっていたのかについていくつかの文脈を持っていたので)。私はフックのキーワードをいくつか持っているので、同じ質問でhttps://stackoverflow.com/q/3434278/1620112で素敵な議論を見ています。だからこれは欺瞞かもしれません。 –

2

<div id="menu">...</div> 

ブラウザは、自分のid属性に対応する名前を持つグローバル変数としてDOM要素を公開します。これは非常に良い習慣ではありませんが、エラーを起こしやすく混乱するので、避けることをお勧めします。

+0

これの名前は何ですか。私はいつもあなたはgetElementById()をしなければならないと思っていました。 –

+1

@CharlieDalsass 'getElementById'、' querySelector'などのDOM要素を適切に選択する方がよいでしょう。javascript.infoの例は悪いパターンです。 – dfsq

+0

私はそれが悪いパターンであることを理解しています。それはおそらく私がこれまで見たことがない理由です。しかし、私はこのメカニズムが何であるかを理解し、それについてもっと知りたいと思います。 –

3

Iは、同じidの要素の値をとります。 [ウェブハイパーテキスト応用技術ワーキンググループ(WHATWG)]で指定されたよう

<div id="menu"> 

:(https://html.spec.whatwg.org/#named-access-on-the-window-object

window[name] 

戻り値が示さWindowオブジェクトに対するアクセスを名前付き

7.3.3要素または要素の集合。

一般的なルールとして、これに依存すると脆いコードにつながります。どのIDがこのAPIへの最終的なマッピングになるかは、たとえば、Webプラットフォームに新しい機能が追加されるなど、時間とともに変化します。代わりにdocument.getElementById()またはdocument.querySelector()を使用してください。

+0

この回答は非常によく似ていて、受け入れるかどうかはわかりません。申し訳ありませんニーナ、おそらく私は最初のものを残すでしょう。誰が最初に答えたのか覚えていない。 ;) –

関連する問題