Цитата:
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, время: 03:31. |