Creating instances of predefined objects in Javasc

2019-05-07 16:18发布

问题:

I know that in Javascript we can create ,instatnces of object like

var ins = new myObject();

I know that ,window ,document etc are predefined objects in javascript..Can we create new instances of these objects.? For ex:
Is

var inss = new document();

possible?

回答1:

Don't confuse objects with constructors (or classes in most OOP languages). In JavaScript, you create objects by calling constructor functions using the new operator:

function MyObject()
{
}

var obj = new MyObject();

Afterwards you can access the constructor given the object using the constructor property:

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

Theoretically, you can create new objects of the same type as a given object:

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

In your case, you might try the same with "built-in" object, but it will probably not work since the script engine might forbid it. For example, Chrome will throw TypeError: Illegal constructor when trying to create a new document using new document.constructor(). This is because document's constructor, HTMLDocument, is not meant to be used directly.



回答2:

Yes and no, mostly no.

You can create a new window object using window.open. It will also have a new document object.

You can create a new DOM document via createDocument, though it won't necessarily have all the special features of the pre-made one. You can also create a new document fragment via createDocumentFragment, which can be very handy.



回答3:

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.



回答4:

The new operator only works with objects that are user defined, or built-ins that have a constructor. document and window don't have constructors.



回答5:

document is not a constructor, it's a constructed object. What you are trying to do is like saying new new Object() or new {}.

The constructor of document is HTMLDocument but you cannot construct it that way, you must use document.implementation.createDocument()