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?
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.
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.
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 Node
s 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.
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.
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()