4

私はJavascriptで、次のようなオブジェクトのインスタンスを作成できることを知っています

var ins = new myObject();

、window、documentなどがjavascriptで事前定義されたオブジェクトであることを知っています。これらのオブジェクトの新しいインスタンスを作成できますか?例

var inss = new document();

可能?

4

5 に答える 5

3

オブジェクトコンストラクター(またはほとんどのOOP言語のクラス)と混同しないでください。JavaScriptでは、new演算子を使用してコンストラクター関数を呼び出すことにより、オブジェクトを作成します。

function MyObject()
{
}

var obj = new MyObject();

constructorその後、プロパティを使用して、オブジェクトを指定してコンストラクターにアクセスできます。

var ctor = obj.constructor;  // (ctor === MyObject) will be true

理論的には、特定のオブジェクトと同じタイプの新しいオブジェクトを作成できます。

var obj1 = new MyObject();
var obj2 = new obj1.constructor();

あなたの場合、「組み込み」オブジェクトで同じことを試すかもしれませんが、スクリプトエンジンがそれを禁止している可能性があるため、おそらく機能しません。たとえば、Chromeは、TypeError: Illegal constructorを使用して新しいドキュメントを作成しようとするとスローしますnew document.constructor()。これは、documentのコンストラクターHTMLDocumentが直接使用されることを意図していないためです。

于 2012-04-30T12:49:12.697 に答える
2

はい、いいえ、ほとんどいいえ。

を使用して新しいwindowオブジェクトを作成できますwindow.open。また、新しいdocumentオブジェクトがあります。

documentを介して新しいDOMを作成できますcreateDocumentが、事前に作成されたDOMのすべての特別な機能を備えているとは限りません。を介して新しいドキュメントフラグメントcreateDocumentFragmentを作成することもできます。これは非常に便利です。

于 2012-04-30T12:48:06.587 に答える
2

いいえ、できません。これらのホストオブジェクトのほとんどにはコンストラクター(例:HTMLDocumentfor document)がありますが、継承機能(例:演算子)にのみ使用され、instanceof呼び出すことはできません。

> document.constructor
HTMLDocument
> new HTMLDocument
Unhandled DOMException: NOT_SUPPORTED_ERR

たとえば、を作成することもできません。これらNodeの「コンストラクタ」は単なるインターフェイスです。

createDocumentただし、オブジェクトで使用可能なメソッドを使用して、新しいDOMを作成できdocument.implementationます。

于 2012-04-30T12:59:49.763 に答える
1

new演算子は、ユーザー定義のオブジェクト、またはコンストラクターを持つ組み込みオブジェクトでのみ機能します。ドキュメントとウィンドウにはコンストラクターがありません。

于 2012-04-30T12:49:32.997 に答える
0

documentコンストラクターではなく、構築されたオブジェクトです。あなたがやろうとしていることは、new new Object()またはと言うようなものですnew {}

のコンストラクタはdocumentですHTMLDocumentが、そのように構築することはできません。使用する必要がありますdocument.implementation.createDocument()

于 2012-04-30T12:50:19.643 に答える