Я пытаюсь проверить, есть ли у документа «скрытое» свойство, используя document.hasOwnProperty, но он всегда возвращает false в Chrome (74).
Я пробовал Object.prototype.hasOwnProperty, но это тоже возвращает false. Когда я попытался преобразовать и разобрать документ, я получил объект Location как свойство.
console.info(document.hasOwnProperty("hidden"));
console.info(Object.prototype.hasOwnProperty.call(document, "false"));
console.info(JSON.parse(JSON.stringify(document)));
console.info(typeof document.hidden !== "undefined");
console.info(document.hidden);
console.info(Document.prototype.hasOwnProperty.call(document, "hidden"));
console.info(Document.prototype.hasOwnProperty.call(document, "location"));
Разве hasOwnProperty
не следует проверять, есть ли у объекта свойство независимо от типа объекта? Прошу прощения, если на вопрос уже был ответ.
Цель hasOwnProperty()
— проверить, определено ли определенное свойство в самом пример и не наследуется ли оно через его prototype
.
В случае document
он по праву возвращает false
, поскольку свойство hidden
фактически определено в интерфейсе Document
, а не в самом экземпляре.
(спасибо @Jonas Wilms за разъяснения)
Почему вы удалили это вместо того, чтобы обновить, чтобы сказать, что свойство включено Document
?
@Ry-, Действительно, я поторопился с удалением.
Спасибо за вклад @ haim770. Я хотел бы спросить, есть ли способ проверить существование свойства с помощью Document, поскольку я пытался и все еще получаю false для hidden
@shrys, чего именно ты пытаешься достичь? Что не так с typeof document.hidden !== "undefined"
?
Я мог бы сделать это или, как предложил @Ry-, я мог бы использовать typeof Object.getOwnPropertyDescriptor(Document.prototype, 'hidden') == "object"
. На самом деле я хотел, чтобы он был универсальным и для других браузеров, которые имеют другое имя для hidden
.
@shrys, ты проверял developer.mozilla.org/en-US/docs/Web/API/…?
@ haim770 да, я видел это. Я думаю, я должен пойти с этой реализацией. Спасибо.
Копирование и исправление удаленного ответа @ haim770 на данный момент:
The purpose of
hasOwnProperty()
is to check whether a certain property is defined on the object itself and is not inherited through itsprototype
.In the case of
document
, it rightfully returnsfalse
since thehidden
property is actually defined on [Document
] and not on [the document object] itself.
console.info('' + Object.getPrototypeOf(document));
console.info('' + Object.getPrototypeOf(Object.getPrototypeOf(document)));
console.info(document.__proto__.__proto__.hasOwnProperty('hidden'));
console.info(Object.getOwnPropertyDescriptor(Document.prototype, 'hidden'));
Нет это не так. Он определен в Интерфейс документа.