Может ли кто-нибудь посоветовать мне, как я могу переопределить функцию прототипа набора данных?
Это моя попытка:
if (document.createElement('div').dataset === undefined) {
console.log('IE FIX');
HTMLElement.prototype.dataset = function() {
console.log('Fired?');
this.menu = 'test';
}
}
Я называю это так:
document.querySelectorAll('[data-menu]')[0].dataset.menu
В настоящее время все, что я получаю в консоли:
IE FIX
Я должен быть Fired?
как минимум?
Изменить 2
См. Ниже код, это все еще не отображает console.log
document.addEventListener('DOMContentLoaded', function() {
if (document.createElement('div').dataset !== undefined) {
Object.defineProperty(
HTMLElement.prototype,
'dataset',
{
value: function () { console.log('dsada'); }
}
)
}
document.querySelectorAll('[data-menu]')[0].dataset;
});
Виды работ в консоли:
Команда: document.createElement('div'). Dataset
function () { console.log('dsada'); }
Однако он должен выполнять функцию.
Редактировать 3
Измененный код, используя value
должен быть просто значением, а не функцией. Я изменил его, чтобы get
который ожидает функцию и выполняет ее.
accessor descriptor= get + set (см. пример выше)
data descriptor= значение + запись (см. пример ниже)
Ниже код отображает элемент правильно
document.addEventListener('DOMContentLoaded', function() {
if (document.createElement('div').dataset !== undefined) {
Object.defineProperty(HTMLElement.prototype, 'dataset', {
get: function () {
console.log(this);
}
})
}
document.querySelectorAll('[data-menu]')[0].dataset;
});
Мой вопрос сейчас, есть способ справиться с чем-то вроде:
document.querySelectorAll('[data-menu]')[0].dataset.menu
вот так:
if (document.createElement('div').dataset !== undefined) {
Object.defineProperty(HTMLElement.prototype, 'dataset', {
get: function () {
console.log(this);
this.getAttribute('data-' + this.arg);
}
})
}
Где это.
document.querySelectorAll('[data-menu]') [0].dataset .menu
Используйте Object.defineProperty:
Object.defineProperty(
HTMLElement.prototype,
'dataset',
{
value: function () { /* whatever */ }
}
)