有人可以告訴我如何覆蓋數據集原型函數嗎?覆蓋數據集函數
這是我嘗試迄今:
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 。菜單
唐你想把它放在'HTMLElement'原型上嗎? – 2017-06-01 12:09:53
嗯,我確實認爲它應該是,更新了我的代碼 –
' dataset'是一個屬性,而不是一個函數。 – 2017-06-01 12:21:59