Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   spike - библиотека внедряет W3C-шные методы в IE (https://javascript.ru/forum/project/27728-spike-biblioteka-vnedryaet-w3c-shnye-metody-v-ie.html)

FINoM 28.05.2012 23:13

Цитата:

Сообщение от melky
моя подпись

Ага. Всё, на базе той куйни, что я привел выше, можно легко сделать dataset.
comment = document.createComment("");
document.documentElement.firstChild.appendChild(comment);
comment.onpropertychange = function () { alert() }

function Data() {
   return { a:4 }
}
Data.prototype = comment
data = new Data
data.x = 5 // алерт

for (var i in data )console.log( i, data[i] )

Журнал: a4
Журнал: x5

melky 28.05.2012 23:19

Цитата:

Сообщение от FINoM
Ага. Всё, на базе той куйни, что я привел выше, можно легко сделать dataset.

а для FF и других добавить event listener для DOMAttrModified.

оригинально!

FINoM 28.05.2012 23:22

Цитата:

Сообщение от melky
а для FF и других добавить event listener для DOMAttrModified.

Разве у ff нет поддержки dataset?

Раед 28.05.2012 23:24

Всё, закончил. http://learn.javascript.ru/play/zRz9xb
1 минус. При вызове element.dataset.myProp = val значение не будет занесено в element.attributes, но зато никаких пропертиченджей
_______________
опоздал немного

FINoM 28.05.2012 23:34

Цитата:

Сообщение от Раед
опоздал немного

Да нет, там много полезного есть того, что лень самому писать :D

FINoM 28.05.2012 23:42

Цитата:

Сообщение от melky
оригинально!

Оно то оригинально, но кто знал? Методом тыка получилось такое реализовать. А вот с defineProperty такой ход не прокатил.
_defineProperty= Object.defineProperty;
comment = document.createComment("");
document.documentElement.firstChild.appendChild(comment);

Object.defineProperty = function( object, property, desc ) {
    object.constructor.prototype = comment;
    _defineProperty(comment, property, desc)
}

o = {};
Object.defineProperty(o, 'x', {set: function(){ alert() }})
o.x = 4; // не работает

Раед 29.05.2012 00:13

Цитата:

Сообщение от FINoM (Сообщение 177249)
Да нет, там много полезного есть

Это я знаю. Вы лучше скажите, чего там нет, что вы с таким упорством пытаетесь присабачить туда createComment?

devote 29.05.2012 00:19

FINoM,
плохой вариант, я пробовал.. в нем есть недостаток.. попробуй сделать так:
comment = document.createComment("");
document.documentElement.firstChild.appendChild(comment);
comment.onpropertychange = function () { alert() }
 
function Data() {
   return { a:4 }
}
Data.prototype = comment
data = new Data
data.x = 5 // алерт

data.y = 5 // херов а не алерт :(
 
for (var i in data )console.log( i, data[i] )

devote 29.05.2012 00:24

и да добавлю, алерт срабатывает не при назначении свойства x а при назначении
comment.onpropertychange = function() {
	alert( window.event.propertyName );
}
тоесть на самого себя

Раед 29.05.2012 00:29

devote,
в вашем примере (new Data) .constructor !== Data


Часовой пояс GMT +3, время: 21:31.