4

我知道在Javascript中我们可以创建像这样的对象实例

var ins = new myObject();

我知道,窗口,文档等是 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();

在您的情况下,您可能会尝试使用“内置”对象,但它可能无法正常工作,因为脚本引擎可能会禁止它。例如,ChromeTypeError: Illegal constructor在尝试使用new document.constructor(). 这是因为document的构造函数 ,HTMLDocument并不意味着直接使用。

于 2012-04-30T12:49:12.697 回答
2

No, you can't. Although most of these host objects have constructors (e.g. HTMLDocument for document), they are only used for inheritance feautures (e.g. the instanceof operator) but can not be invoked.

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

You also can't create Nodes for example, these "constructors" are just interfaces.

Yet, you can create a new DOM with the createDocument method, which is available at the document.implementation object.

于 2012-04-30T12:59:49.763 回答
2

是和不是,大多数情况下都不是。

您可以window使用window.open. 它还将有一个新document对象。

document您可以通过创建一个新的 DOM createDocument,尽管它不一定具有预制的所有特殊功能。您还可以通过创建新的文档片段createDocumentFragment,非常方便。

于 2012-04-30T12:48:06.587 回答
1

new 运算符仅适用于用户定义的对象或具有构造函数的内置对象。document 和 window 没有构造函数。

于 2012-04-30T12:49:32.997 回答
0

document不是构造函数,它是构造对象。你想要做的就像说new new Object()or new {}

documentis的构造函数,HTMLDocument但你不能那样构造它,你必须使用document.implementation.createDocument()

于 2012-04-30T12:50:19.643 回答