Цитата:
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 |
Цитата:
оригинально! |
Цитата:
|
Всё, закончил. http://learn.javascript.ru/play/zRz9xb
1 минус. При вызове element.dataset.myProp = val значение не будет занесено в element.attributes, но зато никаких пропертиченджей _______________ опоздал немного |
Цитата:
|
Цитата:
_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; // не работает |
Цитата:
|
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] ) |
и да добавлю, алерт срабатывает не при назначении свойства x а при назначении
comment.onpropertychange = function() { alert( window.event.propertyName ); }тоесть на самого себя |
devote,
в вашем примере (new Data) .constructor !== Data |
Часовой пояс GMT +3, время: 21:31. |