2017-01-28 2 views
0

私は、(jQueryの$()のように)HTML要素の周りにラッパーを使用するjavascriptライブラリを作成しています。私はこの単純Elementを呼び出すと思ったが、後に、私はJavascriptが出回っElementオブジェクト持っていることを見た:私のように私のラッパーを使用し、このときFound here...エレメント予約されたJavascript関数ですか?

を:

var divs = new Element('div').each(function (element) { 
    console.log(new Element(element)); 
}); 

顕著であること私がでElementにログインしたときコンソール(console.log(Element);)は、それが次のコードを出力する(と私のライブラリは、Webページに含まれていません):

Logging Element

これはNodeと同じです。

私の質問は:Elementの予約語がjavascriptにありますか?または、それが "架空の"オブジェクトなので、カスタムラッパーとして使用するのはまったく問題ありませんか?実際にNodeと同じ質問があるので、それはis an object in javascript aswellですか?

+0

'Element'は予約されていません。これはネイティブで既に実装されているコンストラクタです。 – Li357

+0

ご意見ありがとうございます。だから、 'Element'や' Node'のようなカスタムオブジェクトを使うのはいいですか? @AndrewLi – Galago

+0

私はいいえと言います。彼らはネイティブ実装を持ち、基本的な機能を実行することができます。 DOMの各要素はElementオブジェクトです... – Li357

答えて

2

ElementおよびNodeはDOMの一部です。

グローバルスコープ以外のスコープ(ブロックスコープ、IIFE、ES6/CommonJSモジュール)で使用され、グローバルスコープに上書きされない場合は、またはNodeの名前を使用すると、まったく問題ありません。

グローバルには、必要に応じてwindowにアクセスできます。

(() => { 

class Element { ... } 
class Node { ... } 

Node !== window.Node; 
document instanceof window.Node === true; 

})(); 
+0

これは正解です。モジュール、IIFE、およびブロックは、われわれが知っている、愛しているのと同じ語彙スコープ規則を使用します。 –

+0

@estusなぜ、グローバルなものを上書きするときにはまだすべてが動作していますか?それは論理ではないからです。 – Galago

+1

@Galagoブラウザがこれらのコンストラクタ(DOMの一部であるため通常のコンストラクタではない)への参照を保持している可能性が高いので、再割り当ては 'instanceof Node'のようなサードパーティコードにのみ影響します。とにかく、それはあなたが意図的に再割り当てするべきものではありません。 – estus

関連する問題