2012-04-30 59 views
3

我知道,在JavaScript中,我們可以創建,對象的instatnces像創建預定義對象的實例在Javascript

var ins = new myObject(); 

我知道,窗口,文檔等在javascript..Can我們創建新實例預定義對象這些物體。? 對於前:

var inss = new document(); 

可能嗎?

+1

您可以模擬您自己的DOM元素的構造函數。以[jsdom](https://github.com/tmpvar/jsdom「jsdom」)爲例。 –

+0

thansk的鏈接 –

+0

我不這麼認爲。試試這個var inss = new document();在控制檯上發出錯誤「TypeError:對象不是函數」 – Adil

回答

2

不要混淆對象構造(或在大多數OOP語言)。

function MyObject() 
{ 
} 

var obj = new MyObject(); 

之後,您可以訪問給定的使用constructor屬性對象的構造:在JavaScript中,你使用new操作者調用構造函數創建對象

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

從理論上說,你可以創建新的對象與給定對象相同的類型:

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

對於您的情況,您可能會嘗試使用「內置」對象,但它可能不起作用,因爲腳本引擎可能會禁止它。例如,Chrome嘗試使用new document.constructor()創建新文檔時會拋出TypeError: Illegal constructor。這是因爲document的構造函數HTMLDocument不能直接使用。

1

是和不是,大部分沒有。

您可以使用window.open創建新的window對象。它也會有一個新的document對象。

您可以通過createDocument創建一個新的DOM document,雖然它不一定具有預製的所有特殊功能。您還可以通過createDocumentFragment創建一個新的文檔片段,這可以非常方便。

0

document不是一個構造函數,它是一個構造對象。你所要做的就像是說new new Object()new {}

document構造函數是HTMLDocument但你不能建立這樣的說法,你必須使用document.implementation.createDocument()

1

不,你不能。儘管這些主機對象中的大多數都具有構造函數(例如HTMLDocument用於document),但它們僅用於繼承特性(例如instanceof運算符),但無法調用。

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

你也不能創建Nodes例如,這些「建設者」只是接口。

但是,您可以使用createDocument方法創建一個新的DOM,該方法可在document.implementation對象處獲得。