【问题标题】:Creating instances of predefined objects in Javascript在 Javascript 中创建预定义对象的实例
【发布时间】:2012-05-10 03:57:17
【问题描述】:

我知道在 Javascript 中我们可以创建类似对象的实例

var ins = new myObject();

我知道,窗口,文档等是 javascript 中的预定义对象。我们可以创建这些对象的新实例吗? 例如:

var inss = new document();

可能吗?

【问题讨论】:

  • 您可以为 DOM 元素模拟自己的构造函数。以jsdom 为例。
  • 我不这么认为。试试这个 var inss = new document();在控制台上给出错误“TypeError:对象不是函数”

标签: javascript object window document


【解决方案1】:

不要将 objectsconstructors(或大多数 OOP 语言中的 classes)混淆。在 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();

在您的情况下,您可能会尝试对“内置”对象进行相同的操作,但它可能无法正常工作,因为脚本引擎可能会禁止它。例如,Chrome 在尝试使用 new document.constructor() 创建新文档时会抛出 TypeError: Illegal constructor。这是因为document 的构造函数HTMLDocument 不能直接使用。

【讨论】:

    【解决方案2】:

    有也没有,大部分都没有。

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

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

    【讨论】:

      【解决方案3】:

      不,你不能。尽管这些宿主对象中的大多数都有构造函数(例如 HTMLDocument 代表 document),但它们仅用于继承功能(例如 instanceof 运算符),但不能被调用。

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

      例如,您也不能创建Nodes,这些“构造函数”只是接口。

      不过,您可以使用createDocument 方法创建一个新的DOM,该方法在document.implementation 对象中可用。

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 文档有构造函数,看我的回答。
        【解决方案5】:

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

        document的构造函数是HTMLDocument,但不能这样构造,必须使用document.implementation.createDocument()

        【讨论】:

          猜你喜欢
          • 2012-04-29
          • 1970-01-01
          • 1970-01-01
          • 2017-09-28
          • 1970-01-01
          • 2010-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多