В чем разница между документом и документом в JavaScript?

javascript dom

2163 просмотра

2 ответа

В настоящее время я создаю API для JavaScript, преимущественно с использованием Visual Studio 2010 и JetBrains WebStorm (отлично, если вы ищете пуленепробиваемую JavaScript IDE).

Просматривая список intellisense в Visual Studio (пытаясь ознакомиться с API JavaScript), я заметил, что и то, Documentи другое documentсуществует.

  1. В чем разница между Documentи document?
  2. Что является documentэкземпляром (если есть)?
  3. Как использовать Document(так как это не функция, следовательно, не конструируемая)?
  4. Самое главное, что вредного в "исправлении обезьян", Documentчтобы сделать его конструктивным?

Логическое обоснование этих вопросов заключается в том, что я хочу создать некоторые объекты, которые вписываются в мой API (например Document, HTMLElementи т. Д.), Но поскольку они, похоже, уже существуют в некотором отношении, я не уверен, что мне следует перезаписывать их нативные реализация.

Автор: series0ne Источник Размещён: 12.11.2019 09:12

Ответы (2)


15 плюса

Решение

В чем разница между Documentи document?

document(или window.document) является ссылкой на документ, содержащийся в окне. ( спец )

Documentявляется интерфейсом DOM для документов, который предоставляется глобальному объекту. ( спец , спец )

Как использовать Document(так как это не функция, следовательно, не конструируемая)?

Это хост-объект, и ему не нужно следовать спецификации EcmaScript - но это не значит, что это не функция. Это может отличаться от браузера к браузеру также. Тем не менее, он не предназначен для вызова (если вы попробуете это, вы получите a NOT_SUPPORTED_ERR), существуют другие методы для создания экземпляров / получения новых документов. То, что вы все еще можете использовать это для

> document instanceof Document
true
> Document.prototype
DocumentPrototype {
    adoptNode: Function
    constructor: Document
    createAttribute: Function
    …
    querySelector: Function
    querySelectorAll: Function
}
|- NodePrototype
|- Object

так что вы можете расширить его прототип и использовать эти методы для всех XMLDocuments/ HTMLDocumentsв вашем приложении (но только если вы знаете, что не так с расширением DOM ).

Что наиболее важно, какой вред в "исправлении обезьян" Documentделает его конструктивным?

Я не уверен, как ты это сделаешь. Перезапись может повредить каждый скрипт, который ожидает, что он будет работать, как указано выше (если вы не исправите prototypeсвойство своей новой функции). И, возможно, в некоторых средах это Documentсвойство windowнедоступно для записи, так что вы можете навредить себе.

Автор: Bergi Размещён: 28.05.2013 11:12

1 плюс

  1. DocumentЭто определение прототипа для documentобъекта глобальной области видимости означает, что Documentпрототип 's является общим с его instance ( document). like Window- это определение прототипа для windowобъекта.
  2. Это Documentродной объект-прототип, и вы не можете создавать его экземпляры, только один экземпляр создается, когда страница создается (опять же, как окно) точно так же, как один объект тона.
  3. Я не думаю, что переопределение Documentбудет хорошей практикой.

Я предлагаю использовать пространство имен для вашего API и создать ваш Document, HTMLElement и т. Д. В вашем пространстве имен API, например:

var api = {
    Document: { /* your implementation */ },
    HTMLElement: { /* your implementation */ }
    //...
};

var myDocument = new api.Document();

Более того, вы можете наследовать реальный Documentпрототип и использовать его в своем собственном объекте следующим образом:

api.Document = function(){ /* your implementation */ }
api.Document.prototype = Document.prototype;

var myDocument = new api.Document();

Надеюсь, что это поможет, и я понял ваш вопрос ...

Автор: udidu Размещён: 28.05.2013 11:11
Вопросы из категории :
32x32