问题
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()
来源:https://stackoverflow.com/questions/10383888/creating-instances-of-predefined-objects-in-javascript