覆盖数据集函数
问题描述:
有人可以告诉我如何覆盖数据集原型函数吗?覆盖数据集函数
这是我尝试迄今:
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修复
我应该至少得到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;
});
排序在控制台作品:
命令:文件。 createElement('div')。dataset
function() { console.log('dsada'); }
它应该执行该功能。
编辑3
修改的代码,用value
应该简单地是一个值,而不是一个函数。我将其更改为get
,它需要一个函数并执行它。
-
访问描述符 = +得到设定(见上面的例子)
- 得到必须是一个函数;其返回值用于阅读财产;如果未指定,则缺省值未定义,其行为类似于返回未定义的函数
- 集合必须是函数;其参数用RHS填充以赋予属性值;如果未指定,则默认为未定义的,它的行为就像一个空函数
-
数据描述符 =值+写(见下面的示例)
- 值默认未定义;如果可写,可配置和可枚举(见下文)属实,则该属性的行为与普通数据字段相同
- 可写 - default false;如果不是这样,该属性是只读的;尝试写入被忽略而没有错误*!
下面的代码现在可以正确
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( '[数据菜单]')[0] .dataset 。菜单
答
Object.defineProperty(
HTMLElement.prototype,
'dataset',
{
value: function() { /* whatever */ }
}
)
唐你想把它放在'HTMLElement'原型上吗? – 2017-06-01 12:09:53
嗯,我确实认为它应该是,更新了我的代码 –
' dataset'是一个属性,而不是一个函数。 – 2017-06-01 12:21:59