有人可以就如何覆盖数据集原型函数向我提出建议吗?
这是我到目前为止的尝试:
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
,它需要一个函数并执行它。
访问者描述符 = get + set(参见上面的示例)
数据描述符 =值+可写(参见下面的示例)
下面的代码正确显示元素
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);
}
})
}
this.arg将在哪里
document.querySelectorAll(' [data-menu]')[0] .dataset .menu
答案 0 :(得分:3)
Object.defineProperty(
HTMLElement.prototype,
'dataset',
{
value: function () { /* whatever */ }
}
)